使用spring或Spring Boot集成quartz执行定时任务

最近工作中用到了quartz定时器,我自己写了个测试方法,或许用得上。

项目结构:

 

pom.xml配置

<properties>
        <quartz.version>2.2.3</quartz.version>
        <spring.version>4.2.4.RELEASE</spring.version>
    </properties>

    <dependencies>
        <!--quartz定时器相关依赖-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>${quartz.version}</version>
        </dependency>

        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>${quartz.version}</version>
        </dependency>

        <!--spring相关依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

spring-quartz.xml配置:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">

    <!--要执行任务的类-->
    <bean id="lazyrefundJob" class="com.myTest.TestQuartz"></bean>

    <bean id="everyQuartzClock"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <!--要执行任务的类-->
            <ref bean="lazyrefundJob" />
        </property>
        <!--执行是类中的test()方法-->
        <property name="targetMethod" value="test"></property>
        <!--quartz默认为并发执行。这里将concurrent属性配置为false,不允许任务并发执行-->
        <property name="concurrent" value="false"></property>
    </bean>

    <bean id="crontestJobTrigger"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail">
            <ref bean="everyQuartzClock"></ref>
        </property>
        <!--配置触发时间-->
        <property name="cronExpression">
            <value>0/1 * * * * ?</value>
        </property>
    </bean>

    <!-- 总配置 -->
    <bean name="startQuertz" lazy-init="false" autowire="no"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!--添加触发器-->
        <property name="triggers">
            <list>
                <!--可以添加多个定时任务-->
                <ref bean="crontestJobTrigger" />
            </list>
        </property>
    </bean>

</beans>

编写测试类TestQuartz:

public class TestQuartz {
    public void test() {
        System.out.println("测试定时器--"
                +new SimpleDateFormat("北京时间HH时mm分ss秒").format(new Date()));
    }

}

因为我的这个测试项目并非web项目,所以我还得写一个启动Spring容器的方法。如果是web项目,在web.xml中配置好Spring相关的内容后启动Tomcat就可以让定时任务跑起来了。此处帖出我的启动方法:

AppStart:

public class AppStart {

    private static Logger logger = Logger.getLogger(AppStart.class);

    public static void main(String[] args) {
//        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
//                new String[] { "classpath:spring-quartz.xml" });
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
               "classpath:spring-quartz.xml" );
        context.start();
        logger.info("服务启动成功!");
    }

}

启动main方法:

 

-------------------------------2018.08.13分割线---------------------------------

使用Spring Boot 添加定时任务:

用Spring Boot相比上面配置一大堆xml,可谓是清爽很多了!

项目结构图:

项目结构图

pom.xml配置:

    <dependencies>
        <!--定时器相关的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

添加测试方法:

@Component
@EnableScheduling
public class TestQuartz {
    @Scheduled(cron = "0/1 * * * * ?")
    public void test() {
        SimpleDateFormat sf = new SimpleDateFormat("北京时间HH时mm分ss秒");
        System.out.println("测试定时器--"
                +sf.format(new Date()));
    }

}

启动SpringBootDemoApplication的main方法,让定时器跑起来!

效果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值