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项目中常见问题及答案的话,就请持续关注本网站吧。
推荐阅读: