Java中定时器用于在特定时间运行指定的Java程序,其实现方式有两种:TimerTask和Quartz,其中Quartz最为常用。
首先我们要有架包。Quartz下载地址:http://www.quartz-scheduler.org/downloads/
然后自定义继承QuartzJobBean抽象类的任务类
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class BackJob extends QuartzJobBean{
private String url;
//定时器执行的job方法
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("正在备份数据。。。。");
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
接下来在XML中配置
<!-- 创建一个job对象 -->
<bean id = "jobDetail" class = "org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value = "com.jd.job.BackJob"></property>
<!-- jobDataAsMap用于为任务类成员面两赋值 -->
<property name="jobDataAsMap">
<map>
<entry key = "url" value = "jdbc:mysql:127.0.0.1:/3306/testone"></entry>
</map>
</property>
</bean>
<!-- 指定JOb什么时候触发 TimerTask-->
<!-- startDelay开始时间 repeatInterval间隔时间-->
<bean id = "trigger" class = "org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"></property>
<property name="startDelay" value="1000"></property>
<property name="repeatInterval" value= "1000"></property>
</bean>
<!-- Quartz方法
<bean id ="trigger" class = "org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref = "jobDetail"></property>
<property name="cronExpression" value="cron表达式"></property>
</bean>
-->
<!-- 将job触发器配置至spring job调度器中 -->
<bean class = "org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<array>
<ref bean="trigger"/>
</array>
</property>
</bean>
上述为TimeTask方法,设置开始1秒后启动,每隔一秒执行一次。注释里是Quartz方法,根据需要改写cron表达式
编写Test方法
public class test {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
applicationContext.close();
}
}
附上Cron表达式生成器:https://www.pppet.net/