接着上一篇,这里使用spring配置文件的方式生成spring定时任务。

 

1、相应的web. 没有什么变化,因此便不再罗列。同样的,相应的java代码业务逻辑改动也不大,只是在原来的基础上去掉@Component和@Scheduled(cron = \"0/5 * * * * ?\")参数,也就是把这个类和方法变成一个最简单的java类和方法就可以了。

 

2、既然是配置文件的方式,那么改动大的自然就是spring. 配置,把原本用注解实现的定时功能放到配置中来,改动后的配置如下:

<?  version=\"1.0\" encoding=\"UTF-8\"?>
<beans  ns:task=\"http://www.spring work.org/schema/task\"
     ns=\"http://www.spring work.org/schema/beans\"  ns:xsi=\"http://www.w3.org/2001/ Schema-instance\"
     ns:context=\"http://www.spring work.org/schema/context\"
    xsi:schemaLocation=\"
http://www.spring work.org/schema/beans
http://www.spring work.org/schema/beans/spring-beans-3.0.xsd
http://www.spring work.org/schema/context
http://www.spring work.org/schema/context/spring-context-3.0.xsd
http://www.spring work.org/schema/task
http://www.spring work.org/schema/task/spring-task-3.1.xsd\">
 
    <!-- 指定相应的包 -->
    <context:component-scan  -package=\"scheduleTest\"/>

    <!-- 指定相应的类 -->
    <bean id=\"scheTest1\" class=\"scheduleTest.ScheduleTest1\"/>
 
     <!-- 指定要定时任务需要执行的业务逻辑的java类和方法 -->
    <bean id=\"scheTest11\" class=\"org.spring work.scheduling.quartz.MethodInvokingJobDetailFactoryBean\"> 
        <property name=\"target \"> <ref local=\"scheTest1\" /> </property> 
        <property name=\"targetMethod\">
            <!--  要执行的方法名称  -->
            <value>schTest1</value> 
        </property> 
        <!-- 允许并发运行 -->
        <property name=\"concurrent\" value=\"true\" /> 
    </bean>
 
    <!--定义触发的时间 -->
    <bean id=\"scheTest1Cron\" class=\"org.spring work.scheduling.quartz.CronTriggerBean\"> 
        <property name=\"jobDetail\">
            <ref bean=\"scheTest11\" /> 
        </property> 
        <property name=\"cron \"> 
            <value>0/5 * * * * ?</value> 
        </property> 
    </bean>
 
    <!--触发器 -->
    <bean autowire=\"no\" class=\"org.spring work.scheduling.quartz.SchedulerFactoryBean\"> 
        <property name=\"triggers\">
           <list> <ref local=\"scheTest1Cron\" /> </list> 
        </property> 
    </bean>
 
</beans>

 

3、一开始我没有导入其他的jar包,然后启动报错classNotFound,如下:

org.spring work.beans.factory.CannotLoadBeanClassException: Cannot find class [org.spring work.scheduling.quartz.MethodInvokingJobDetailFactoryBean] for bean with name \'scheTest11\' defined in class path resource [spring1. ]; nested exception is java.lang.ClassNotFoundException: org.spring work.scheduling.quartz.MethodInvokingJobDetailFactoryBean

查了一下后发现这个包没有在spring-context.jar中,而是在spring-context-support.jar中,于是导入这个包。但之后启动继续报错:

java.lang.NoClassDefFoundError: org/quartz/JobDetail

这是说需要quartz这个包,但是没有导入,于是再次导入,启动依旧报错:

java.lang.NoClassDefFoundError: org/spring work/transaction/TransactionException

这个错误曾经见过,我知道是少了spring-tx.jar这个包,于是再次导入,启动之后终于见到想到的结果,五秒执行一次。

至此,使用spring配置文件的方式生成定时任务的功能实现,maven导包最终配置如下:

<dependency>
    <groupId>org.spring work</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.1.6.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.spring work</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.1.6.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.spring work</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.spring work</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.0.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>quartz</groupId>
    <artifactId>quartz</artifactId>
    <version>1.5.2</version>
</dependency>

<dependency>
    <groupId>org.spring work</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>

 

转自:https://blog.csdn.net/tuzongxun/article/details/51577202

收藏 打印