实现的效果,定时执行
有关Quartz不做介绍,可自行学习
首先添加依赖
spring相关的依赖根据自己的版本添加,注意要加spring-context-support的依赖,版本和spring的版本保持一致就可以了
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
写一个要定时执行的类
public class HelloWordJob {
public void sayHi(){
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = simpleDateFormat.format(new Date());
System.out.println("hi "+date);
} catch (Exception e){
e.printStackTrace();
}
}
}
XML的配置
在spring的配置文件中加入以下代码,其中id=helloWordJob的bean就是你要定时实行的类,其他的不用改
<!-- job -->
<bean id="helloWordJob" class="com.imooc.myo2o.service.impl.HelloWordJob"/>
<!-- 使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过targetMethod指定调用方法-->
<!-- jobDetail -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="helloWordJob"/>
<property name="targetMethod" value="sayHi"/>
<!--false表示等上一个任务执行完后再开启新的任务,这里和上一遍博客中的注解@DisallowConcurrentExecution一个道理-->
<property name="concurrent" value="false"/>
</bean>
<!-- Trigger-->
<bean id="helloWordJobCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"/>
<property name="cronExpression" value="0/3 * * * * ?"/>
</bean>
<!--Scheduler -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="helloWordJobCronTrigger"/>
</list>
</property>
</bean>
这样启动你的Tomcat就可以看到效果了
让目标方法按照自己指定的时间执行,可修改 Trigger的cronExpression,可参考在线Cron表达式生成器:https://www.pppet.net/