Springboot现在几乎是项目都要配置,在项目中有时候会用到定时器,小伙伴们知道springboot要怎么整合定时器吗?有哪些方式呢?这就跟着小编来浏览浏览吧。
一般有着这三种常用方式:
一、使用Quartz定时器
1)、定义需要定时执行的方法类,并实现Job接口
/** * @ Author :Zgq * @ Date :Created in 11:47 2019/6/6 * @ Description:定时器.创建要执行的方法 * @ Modified By: * @Version: $ */ public class MyJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { // TODO Auto-generated method stub //需要定时执行的方法 System.out.println("MyJob1"); } }
2)、把我们自己的方法加入Spring容器,就是写定时器中,这样就能够在项目运行时才看到效果
/** * @ Author :Zgq * @ Date :Created in 11:49 2019/6/6 * @ Description:2.---->Quartz定时器 * @ Modified By: * @Version: $ */ @Configuration public class QuartzConfig { @Bean public JobDetail teatQuartzDetail1() { return JobBuilder.newJob(MyJob.class) .withIdentity("testQuartz1") .storeDurably() .build(); } @Bean public Trigger testQuartzTrigger1() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(9) //设置时间周期单位秒 .repeatForever(); return TriggerBuilder.newTrigger() .forJob(teatQuartzDetail1()) .withIdentity("testQuartz1") .withSchedule(scheduleBuilder) .build(); } }
3)、在主程序运行该定时器
import java.text.ParseException; import java.util.Date; import java.util.Timer; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import cn.test.quartz.MyJob; import cn.test.quartz.Task; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /** * @author zgq * @version 创建时间:2019年1月25日 上午8:55:21 解释: */ public class Test { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub // 创建工作 JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withDescription("工作的描述") .withIdentity("工作的名称", "工作的组") .build(); // 创建触发器 Trigger trigger = TriggerBuilder.newTrigger() .withDescription("触发器的描述") .withIdentity("触发器的名称", "触发器的组") .withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?")) // "0/5 11 * ? * *"表达式 .startAt(new Date()) // 不设置,默认为当前时间 .build(); // 创建调度器,粘合工作和触发器 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.scheduleJob(jobDetail, trigger); // 启动调度器 scheduler.start(); } }
二、使用@Scheduled注解
/** * @ Author :Zgq * @ Date :Created in 10:43 2019/6/6 * @ Description:3.--->Scheduler定时器 * @ Modified By: * @Version: $ */ @Component public class Scheduler { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //每隔2秒执行一次 @Scheduled(fixedRate = 5000) public void testTasks() throws Exception { System.out.println("定时任务执行时间:" + dateFormat.format(new Date())); /*new MailSender() .title("发送邮件") .content("test") .contentType(MailContentTypeEnum.TEXT) .targets(new ArrayList<String>(){{ add("***@qq.com"); }}) .send();*/ } //每天3:05执行 @Scheduled(cron = "0 05 03 ? * *") public void testTasks2() { System.out.println("定时任务执行时间:" + dateFormat.format(new Date())); } }
三、使用TimerTask类中提供的定时方法
public static void main(String[] args) throws java.io.IOException { TimerTask task = new TimerTask() { @Override public void run() { System.out.println("hello"); } }; Timer timer = new Timer(); timer.schedule(task, 0, 5000); // 0标识 5000指延迟的时间5000毫秒 }
以上就是关于springboot整合定时器所有内容,如果还有疑问,想知道更多java项目中常见问题及答案的话,就请持续关注本网站吧。
推荐阅读: