❶ 用java的Quartz包定时调用方法,我想实现每隔一个半小时调用一次方法, 请问Corn表达式怎么写
结合spring框架写的
<beanid="cronTriggerPay"
class="org.springframework.scheling.quartz.CronTriggerBean">
<propertyname="jobDetail">
<!--使用嵌套Bean的方式来定义任务Bean-->
<bean
class="org.springframework.scheling.quartz.JobDetailBean">
<!--指定任务Bean的实现类-->
<propertyname="jobClass"
value="org.seu.yto.schele.PayJob"/>
<!--为任务Bean注入属性-->
<propertyname="jobDataAsMap">
<map>
<entrykey="empMgr"value-ref="empManager"/>
</map>
</property>
</bean>
</property>
<!--指定Cron表达式:每月1日6点启动-->
<propertyname="cronExpression"value="0061*?*"/>
</bean>
<!--定义触发器来管理任务Bean-->
<beanid="cronTriggerPunch"
class="org.springframework.scheling.quartz.CronTriggerBean">
<propertyname="jobDetail">
<!--使用嵌套Bean的方式来定义任务Bean-->
<bean
class="org.springframework.scheling.quartz.JobDetailBean">
<!--指定任务Bean的实现类-->
<propertyname="jobClass"
value="org.seu.yto.schele.PunchJob"/>
<!--为任务Bean注入属性-->
<propertyname="jobDataAsMap">
<map>
<entrykey="empMgr"value-ref="empManager"/>
</map>
</property>
</bean>
</property>
<!--指定Cron表达式:周一到周五8点、12点执行调度-->
<propertyname="cronExpression"
value="008,12?*MON-FRI"/>
</bean>
<!--执行实际的调度调度-->
<bean
class="org.springframework.scheling.quartz.SchelerFactoryBean">
<propertyname="triggers">
<list>
<reflocal="cronTriggerPay"/>
<reflocal="cronTriggerPunch"/>
</list>
</property>
</bean>
❷ java的几种定时任务
java定时任务有三种:
- JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheledExecutorService;
- Quartz :简单却强大的JAVA作业调度框架
- Spring3.0以后自带的task :可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多;
代码参考:
JDK 自带的定时器实现
schele(TimerTask task, Date time) 特定时间执行
public static void main(String[] args) {
for (int i = 0; i < 10; ++i) {
new Timer("timer - " + i).schele(new TimerTask() {
@Override
public void run() {
println(Thread.currentThread().getName() + " run ");
}
}, new Date(System.currentTimeMillis() + 2000));
}
}
Quartz 定时器实现
2.1 通过maven引入依赖(这里主要介绍2.3.0) 注意:shiro-scheler中依赖的是1.x版本 如果同时使用会冲突
<!-- https://mvnrepository.com/artifact/org.quartz-scheler/quartz -->
<dependency>
<groupId>org.quartz-scheler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
2.2创建Job类
public class TestJob implements Job{
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
println(Thread.currentThread().getName() + " test job begin " + DateUtil.getCurrentTimeStr());
}
}
2.3调度任务
public static void main(String[] args) throws InterruptedException, SchelerException {
Scheler scheler = new StdSchelerFactory().getScheler();
// 开始
scheler.start();
// job 唯一标识 test.test-1
JobKey jobKey = new JobKey("test" , "test-1");
JobDetail jobDetail = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build();
Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("test" , "test")
// 延迟一秒执行
.startAt(new Date(System.currentTimeMillis() + 1000))
// 每隔一秒执行 并一直重复
.withSchele(SimpleScheleBuilder.simpleSchele().withIntervalInSeconds(1).repeatForever())
.build();
scheler.scheleJob(jobDetail , trigger);
Thread.sleep(5000);
// 删除job
scheler.deleteJob(jobKey);
}
3.Spring 相关的任务调度
3.1 配置文件实现
spring-schele.xml
<task:scheler id="myScheler" pool-size="10" />
<task:scheled-tasks scheler="myScheler">
<task:scheled ref="job" method="test" cron="0 * * * * ?"/>
</task:scheled-tasks>
3.2注解实现
spring-schele.xml
<task:scheler id="myScheler" pool-size="10" />
// 启用注解
<task:annotation-driven scheler="myScheler"/>
@Component
public class Task{
@Scheled(cron="0/5 * * * * ? ") //每5秒执行一次
public void execute(){
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(DateTime.now().toDate())+"*********B任务每5秒执行一次进入测试");
}
}