springboot定时任务同步数据,springboot定时任务动态配置
在我们实际的项目开发过程中,经常需要预定的任务来帮助我们做一些事情,比如每隔一个小时统计一次新注册用户的数量,每天凌晨1点清理服务器缓存,每周五统计购买会员的用户数量等等。
如何解决写爬虫IP受阻的问题?立即使用。
在2.0版本之后,SpringBoot提供了一种非常方便的注释方式来编写调度任务程序,不需要添加任何配置文件和依赖关系。快速构建SpringBoot项目,添加以下注释:
@SpringBootApplication
@启用调度
公共类演示应用程序{
公共静态void main(String[] args) {
spring application . run(demo application . class,args);
}
}@EnableScheduling:打开对计划任务的支持。
注解方式-单线程
创建要存储在任务包中的SchedulerTask1类:
@组件
公共课程计划任务1 {
@Scheduled(cron=*/6 * * * *?)
私有void进程(){
系统。out.println(调度程序任务1: local datetime.now()。to local time() \ r \ n thread: thread . current thread()。getName()));
}
}创建要存储在任务包中的Schedulertask2类:
@组件
公共课程计划任务2 {
@Scheduled(固定速率=3000)
私有void进程(){
系统。out.println(调度程序任务2: local datetime.now()。to local time() \ r \ n thread: thread . current thread()。getName()));
}
}@Scheduled参数可以接受两种定时设置,一种是cron=*/6 * * * *?,一个是fixedRate=3000,两个都表示每x秒打印一次内容。
fixedRate 说明
@Scheduled(fixedRate=3000):最后一次执行时间后3秒。
@Scheduled(fixedDelay=3000):最后一次执行后3秒。
@ Scheduled(初始延时=1000,固定速率=6000):第一次延时执行1秒,然后按
固定速率的规则每6秒执行一次。
Cron表达式参数分别表示:
秒(0~59),例如0/5表示每隔5秒。
分数(0~59)
小时(0~23)
当天(0~31),需要计算
月份(0~11)
周(您可以填写1-7或星期日/星期一/TUE/星期三/THU/星期五/星期六)
启动项目,执行结果如下:
日程安排任务2:21:36:47 . 48686868687
线程:调度-1
日程安排任务1:21:36:48 . 468686886866
线程:调度-1
日程安排任务2:21:36:50 56866 . 48686868686
线程:调度-1
日程安排任务2:21:36:53 . 46666868667
线程:调度-1
日程安排任务1:21:36:54 54686 . 48686868686
线程:调度-1
日程安排任务2:21:36:56 . 366676767687
线程:调度-1
日程安排任务2:21:36:59 54666 . 36666666667
线程:调度-1
日程安排任务1:21:37:00 . 49867 . 48868686686
线程:调度-1
日程安排任务2:21:37:02 . 36687
线程:调度-1
日程安排任务2 : 21:37:05.802238
线程:调度-1
日程安排任务1:21:37:06 . 20002003637
Thread: scheduling-1可以看出,当上述两个被调度的任务同时执行时,使用的是同一个thread: scheduling-1,任务的执行机会受到前一个任务执行时间的影响。
注解方式-多线程
新的MultithreadScheduleTask类存储在任务包中:
@组件
@启用异步
公共类MultithreadScheduleTask {
@Async
@Scheduled(fixedDelay=1000)
public void first()引发InterruptedException {
第一个计划任务开始: localdatetime.now()。to local time() \ r \ n thread: thread . current thread()。getName()));
thread . sleep(1000 * 10);
}
@Async
@Scheduled(固定延迟=2000)
public void second() {
第二个计划任务开始: localdatetime.now()。to local time() \ r \ n thread: thread . current thread()。getName()));
system . out . println();
}
}@EnableAsync:开启多线程
启动项目,运行结果如下:
第一个计划任务的开始时间:21:48:40 . 400000000001
线程:任务1
第二个计划的任务开始时间:21:48:40。50600.66866868661
线程:任务2
第一个计划任务的开始时间:21:48:40 . 40000000001
线程:任务3
第二个计划任务开始于21:48:49.114640。
线程:任务4
第一个计划任务开始于21:48:49.114640。
线程:任务5
第一个计划任务的开始时间:21:48:50 . 40000000001
线程:任务6
第二个计划的任务开始时间:21:48:5 . 54686 . 36868686667
线程:任务7
第一个计划任务的开始时间:21:48:5 53686 . 48686868661
线程:任务8
第一个计划任务的开始时间:21:48:50。56600.66866868661
线程:任务2
第二个计划的任务开始时间:21:48:53。54600.66866868661
线程:任务4
第一个计划任务开始于21:48:53.140095。
线程:任务7
第一个计划任务的开始时间:21:48:5 53686 . 48686868661
线程:任务4
第二个计划任务开始于21:48:57.130710。
Thread:上面的task-1是SpringBoot- timed任务的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。