springboot整合springtask
2024-08-26 02:58:54
在使用 springmvc 中,一般的定时任务是使用 job 或者 quartz 或者timer来实现,但是使用它们的时候比较麻烦,会在 xml 文件中配置很多,
springboot 的定时任务比较简单。
1、在 application 启动类中使用 @EnableScheduling 注解开启定时任务,会自动扫描,相当于一个开关,把这个开关开完之后,那么只要在相应的任务类中做相应的任务,那么就会被 spring boot 容器扫描到,扫描到后,根据任务定义的时间
会自动运行
@SpringBootApplication
@EnableScheduling
public class SpringbootredisApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootredisApplication.class, args);
} }
2 配置组件
package com.cxy.config; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import java.util.Date; @Component
public class TaskTest {
@Scheduled(cron = "*/1 * * * * ?")
public void po(){
System.out.println(System.currentTimeMillis());
}
}
控制台输出
除了支持cron表达式之外还支持:
@Component
public class TaskTest {
// @Scheduled(cron = "*/1 * * * * ?")
// public void po(){
// System.out.println(System.currentTimeMillis());
// } @Scheduled(fixedRate = )
public void po(){
System.out.println(System.currentTimeMillis());
}
}
执行结果:
fixedRate: 上一次 启动时间点之后 X秒执行一次
fixedDelay: 上一次 结束时间点之后 每X秒执行一次
initialDelay: 第一次延迟 X秒执行,之后按照fixedRate的规则每X秒执行
但是springtask任务在分布式的时候会存在问题:部署多台服务之后,到底哪个服务器执行呢,那么就应该思考代码问题,不管不是timer,还是quatz等都是存在问题的,这种问题可以采用一下来执行:
1 可以选择代码分离进行单台部署,
2 可以选择redis分布式锁,让一台服务拿到相应的key之后去执行
3 使用zookeeper分布式锁获取单个锁,
如果别人问道这个问题,我们应该知道,清晰代码思路,确实我在之前项目是单台tomcat部署的,所有使用的是这个springtask作为定时任务,只是存在如果节点宕机之后就会出现
问题,所以可以去学习分布式任务进行整合,例如xxl-job
最新文章
- Centos 7 minimal install 无网络无ifconfig的解决
- 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
- HTML5 视频(一)
- react入门(4)
- web 打开子窗口提交数据或其他操作后 关闭子窗口且刷新父窗口实现
- Linux 下三种方式设置环境变量
- git tag查看、创建与删除
- 一个简单的web服务器
- meanshift和camshift
- Poco C++——HTTP的post请求和get请求
- 虚拟机装centos 桥接方式上网[转]
- jq选择器 第一部分
- Ice笔记-利用Ice::Application类简化Ice应用
- Ubuntu如何配置SSH免密登录
- destruct析构函数里操作文件出现的问题
- ABP学习之路--切换mysql数据库
- c++中的auto、const auto&;
- AWS免费EC2
- 关于ACtion类利用file类型取得上传文件的内容,名字和内容类型
- bash:express:command not found