接着上一篇,这里使用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>
继续阅读与本文标签相同的文章
剑指Java面试-Offer直通车
华为有多少总裁,多少副总裁,分别管什么?
-
第六届世界互联网大会“新看点”大盘点
2026-05-14栏目: 教程
-
特斯拉自动驾驶系统涨价遭质疑 马斯克:我们不能一直亏钱
2026-05-14栏目: 教程
-
首个二类资源区平价光伏电站正式并网发电
2026-05-14栏目: 教程
-
AI+5G科技创新 视频行业呈现轻应用化趋势
2026-05-14栏目: 教程
-
1.98亿滴滴用户添加了紧急联系人 每天百万个订单行程分享给亲友
2026-05-14栏目: 教程
