spring定时任务配置
1:导包,maven
<!--定时开始-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
</dependency>
<!--定时结束-->
2:引入定时任务配置文件
在web.xml中引入
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:配置文件路径</param-value>
</context-param>
或spring配置文件中引入
<import resource="classpath:配置文件路径" />
3:编写定时任务
可以随便写
public class Time{
public void test() {
System.out.println(new Date());
}
}
4:编写定时任务配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 定时任务的Bean 注意:定时器如果放在了service下! service中有@sevice注解 这意味着:
1. @Service在声明bean的时候如果不指定名称的话,会默认以类名的一个字母小写命名。
2. 当spring初始化bean时,会监测要初始化的bean是否已经存在相同名称的bean。
如果此时再使用spring自动注入 则注入两次 便会报错 所以直接使用@Service生成的bean即可。
-->
<bean id="monitorService" class="要执行定时任务的类路劲" />
<!-- 定义生成工作对象的工厂,并为工厂设定目标对象targetObject属性、目标对象的工作方法targetMethod属性 -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="monitorService" />
<property name="targetMethod">
<value>test</value>
</property>
<property name="concurrent" value="false" />
</bean>
<!-- 进行定时设置。 -->
<bean id="cronQuartzClock" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<!-- cron表达式 -->
<property name="cronExpression">
<!-- 0 0 */2 * * ? 每两小时、整点触发 -->
<!-- 每天23点执行一次:0 0 23 * * ? -->
<!-- 0/5 * * * * ? 每五秒钟 -->
<!-- 0 00 10 * * ? 每天Y分X点触发 -->
<!-- <value>0 16 15 * * ?</value> -->
<value>0 30 23 * * ?</value> <!--23点30分执行 -->
</property>
</bean>
<!-- 启动定时任务-->
<bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 可以添加多个定时 -->
<ref bean="cronQuartzClock" />
</list>
</property>
</bean>
</beans>
使用注解方式
<!-- 定时任务配置 scheduler 方式 注解 暂时不支持动态更新 -->
<context:component-scan base-package="定时任务所在包" />
<task:executor id="executor" pool-size="5" />
<task:scheduler id="scheduler" pool-size="10" />
<task:annotation-driven executor="executor" scheduler="scheduler" />
使用时
public class Time{
@Scheduled(cron="0/1 * * * * ?")//每秒钟执行一次
public void test() {
System.out.println(new Date());
}
}
动态配置定时任务
查看的是jeecg开源框架的动态定时任务
思路是读取配置文件,动态修改配置文件的节点,从而达到动态配置的效果