zl程序教程

您现在的位置是:首页 >  后端

当前栏目

spring schedule定时任务(二):配置文件的方式

Spring配置文件 方式 任务 定时 Schedule
2023-09-14 09:04:42 时间
1、相应的web.xml没有什么变化,因此便不再罗列。同样的,相应的java代码业务逻辑改动也不大,只是在原来的基础上去掉@Component和@Scheduled(cron = "0/5 * * * * ?")参数,也就是把这个类和方法变成一个最简单的java类和方法就可以了。 2、既然是配置文件的方式,那么改动大的自然就是pring.xml配置,把原本用注解实现的定时功能放到配置中来,改动后的配置如下:
 ?xml version="1.0" encoding="UTF-8"? 

 beans xmlns:task="http://www.springframework.org/schema/task"

 xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns:context="http://www.springframework.org/schema/context"

 xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/task

http://www.springframework.org/schema/task/spring-task-3.1.xsd" 

 !-- 指定相应的包 -- 

 context:component-scan base-package="scheduleTest"/ 

 !-- 指定相应的类 -- 

 bean id="scheTest1" / 

 !-- 指定要定时任务需要执行的业务逻辑的java类和方法 -- 

 bean id="scheTest11" 

 property name="targetObject" ref local="scheTest1" / /property 

 property name="targetMethod" 

 !-- 要执行的方法名称 -- 

 value schTest1 /value 

 /property 

 property name="concurrent" value="true" / 

 /bean 

 !--定义触发的时间 -- 

 bean id="scheTest1Cron" 

 property name="jobDetail" 

 ref bean="scheTest11" / 

 /property 

 property name="cronExpression" 

 value 0/5 * * * * ? /value 

 /property 

 /bean 

 !--触发器 -- 

 bean autowire="no" 

 property name="triggers" 

 list ref local="scheTest1Cron" / /list 

 /property 

 /bean 

 /beans 

org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean] for bean with name scheTest11 defined in class path resource [spring1.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
查了一下后发现这个包没有在spring-context.jar中,而是在spring-context-support.jar中,于是导入这个包。但之后启动继续报错:
java.lang.NoClassDefFoundError: org/quartz/JobDetail
这是说需要quartz这个包,但是没有导入,于是再次导入,启动依旧报错:
java.lang.NoClassDefFoundError: org/springframework/transaction/TransactionException

这个错误曾经见过,我知道是少了spring-tx.jar这个包,于是再次导入,启动之后终于见到想到的结果,五秒执行一次。 至此,使用spring配置文件的方式生成定时任务的功能实现,maven导包最终配置如下:
 dependency 

 groupId org.springframework /groupId 

 artifactId spring-web /artifactId 

 version 4.1.6.RELEASE /version 

 /dependency 

 dependency 

 groupId org.springframework /groupId 

 artifactId spring-webmvc /artifactId 

 version 4.1.6.RELEASE /version 

 /dependency 

 dependency 

 groupId org.springframework /groupId 

 artifactId spring-context /artifactId 

 version 4.1.7.RELEASE /version 

 /dependency 

 dependency 

 groupId org.springframework /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.springframework /groupId 

 artifactId spring-tx /artifactId 

 version 4.1.7.RELEASE /version 

 /dependency 

 /dependencies 

ActiveMQ系列:结合Spring,基于配置文件的使用ActiveMQ 从activemq脚本可以看出启动ActiveMQ实际是启动,bin文件夹下的其实activemq.jar 包中有一个类为Main,这就是active的启动入口,Main主要是加载lib目录和ClassPath,初始化 类加载器,委托给ShellCommand,由ShellCommand根据命令描述去执行,如果是Version和HELP, 则打印信息,若是启动命令,则通过XBeanBrokerFactory创建BrokerService
Spring Boot、Spring Cloud 自定义配置文件(如何整合配置中心) Spring Boot配置 在spring中我们都知道所有配置定义在配置文件 application.yml 中我们就可以通过注解获取到。 Spring 中对所有配置管理都有一个统一的上层接口 Environment
涂宗勋 认真生活,快乐工作,保持理想!https://blog.csdn.net/tuzongxun
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载