springboot自带定时任务和集成quartz
1,springboot自带的定时任务 默认是单线程
有这个依赖就可以
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
在启动类加注解 @EnableScheduling
然后在方法上 @Scheduled(cron="*/5 * * * * ?") 或者 @Scheduled(fixedRate = 5000) 就可以了 很简单
2,把springboot自带配成多线程
加一个类
@Configuration
@EnableScheduling //开启定时器
public class SchedulerConfig implements SchedulingConfigurer { @Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
//多线程配置
scheduledTaskRegistrar.setScheduler(taskExecutor());
} @Bean
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(100);
} } 再用@Scheduled 起任务时 已经是多线程了 3,springboot集成quartz
加依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency> 写一个任务 继承Job就可以 自己的业务写在这
public class QuartzJobDemo implements Job {
private static final Logger logger = LoggerFactory.getLogger(QuartzJobDemo.class);
@Override
public void execute(JobExecutionContext jobExecutionContext){
Thread current = Thread.currentThread();
logger.info("QuartzJobDemo.execute 定时任务Quartz:"+current.getId()+ ",name:"+current.getName());
}
}
搞一个Manager管理一下任务startJobDemo方法就是怎么用quartz执行任务
@Component
public class QuartzManager {
private static final Logger logger = LoggerFactory.getLogger(QuartzManager.class); @Autowired
private Scheduler scheduler; public void startJob() throws SchedulerException{
startJobDemo(scheduler);
} private void startJobDemo(Scheduler scheduler) throws SchedulerException {
// 通过JobBuilder构建JobDetail实例,JobDetail规定只能是实现Job接口的实例
// JobDetail 是具体Job实例
JobDetail jobDetail = JobBuilder.newJob(QuartzJobDemo.class).withIdentity("job1", "group1").build();
// 基于表达式构建触发器
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
// CronTrigger表达式触发器 继承于Trigger
// TriggerBuilder 用于构建触发器实例
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job1", "group1")
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
}
public void removeJob(String jobName, String groupName) {
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, groupName);
try {
if (checkExists(jobName, groupName)) {
scheduler.pauseTrigger(triggerKey);
scheduler.unscheduleJob(triggerKey);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
} public boolean checkExists(String jobName, String groupName) throws SchedulerException {
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, groupName);
return scheduler.checkExists(triggerKey);
} public void updateJob(String jobName, String groupName, String time){
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, groupName);
try{
int fixedRate = Integer.valueOf(time)*1000;
SimpleTriggerImpl trigger = (SimpleTriggerImpl)scheduler.getTrigger(triggerKey);
if(trigger.getRepeatInterval() != fixedRate){
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.repeatSecondlyForever(fixedRate);
Trigger newTrigger = TriggerBuilder.newTrigger().withIdentity(jobName, groupName)
.withSchedule(scheduleBuilder).build(); removeJob(jobName, groupName);
scheduler.rescheduleJob(triggerKey, newTrigger);
}
}catch (Exception e){
throw new RuntimeException(e);
}
} } 可以用spring调用任务启动 或者用其他方式启动
@Configuration
@Component
public class StartQuartzJobListener implements ApplicationListener<ContextRefreshedEvent> { private static final Logger logger = LoggerFactory.getLogger(StartQuartzJobListener.class); @Autowired
private QuartzManager quartzManager; /**
* 初始启动quartz
*/
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
try {
quartzManager.startJob();
logger.info("定时任务已经启动...");
} catch (SchedulerException e) {
e.printStackTrace();
}
} /**
* 初始注入scheduler
* @return
* @throws SchedulerException
*/
@Bean
public Scheduler scheduler() throws SchedulerException{
SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory();
return schedulerFactoryBean.getScheduler();
}
}
springboot自带定时任务和集成quartz的更多相关文章
- Springboot自带定时任务实现动态配置Cron参数
同学们,我今天分享一下SpringBoot动态配置Cron参数.场景是这样子的:后台管理界面对定时任务进行管理,可动态修改执行时间,然后保存入库,每次任务执行前从库里查询时间,以达到动态修改Cron参 ...
- SpringBoot集成Quartz实现定时任务
1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...
- SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)
最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...
- SpringBoot系列:Spring Boot集成定时任务Quartz
一.关于Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.在java企业级应用中,Q ...
- SpringBoot中的定时任务与Quartz的整合
SpringBoot集成Quartz 定时任务Quartz : 就是在指定的时间执行一次或者循环执行,在项目的开发中有时候会需要的, 还是很有用的. SpringBoot内置的定时 添加依赖 < ...
- spring boot1.0 集成quartz 动态配置定时任务
转载自 https://www.imooc.com/article/36278 一.Quartz简介了解 Quartz Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应 ...
- SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)
使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. Quartz的4个核心概念: 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法v ...
- ssh中使用spring的集成quartz 编写定时任务
之前没有使用框架开发时对于开发定时任务都是 使用java的原声timer类,重写线程的run方法跑要执行的任务.刚刚换的新公司,项目使用ssh2,目前该项目中的定时任务的使用spirng集成的quar ...
- Spring Boot集成quartz实现定时任务并支持切换任务数据源
org.quartz实现定时任务并自定义切换任务数据源 在工作中经常会需要使用到定时任务处理各种周期性的任务,org.quartz是处理此类定时任务的一个优秀框架.随着项目一点点推进,此时我们并不满足 ...
随机推荐
- Go并发编程实战 (郝林 著)
第1章 初识Go语言 1.1 语言特性 1.2 安装和设置 1.3 工程构造 1.3.1 工作区 1.3.2 GOPATH 1.3.3 源码文件 package main import ( " ...
- 3.1 MathType上标位置调整的两种方法
具体操作步骤如下: 1.打开MathType窗口后在工作区域中编辑好公式. 2.调整上标位置有两种方法: (1)选中要调整的上标,按下“Ctrl+↑,Ctrl+↓,Ctrl+←,Ctrl+→”进行调整 ...
- redis 延时任务 看一篇成高手系列2
引言 在开发中,往往会遇到一些关于延时任务的需求.例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务.那么这里就会产生一 ...
- python读取指定字节长度的文本
软件版本 Python 2.7.13; Win 10 场景描述 1.使用python读取指定长度的文本: 2.使用python读取某一范围内的文本. Python代码 test.txt文本内包含的 ...
- Ajax请求的几个小练习
Ajax请求的几个小练习 准备工作 路由中做了分发: re_path('^app01/',include('app01.url')) app01中url.py文件的内容: from django.ur ...
- [UE4]从零开始构建VR角色
一个工程是不是VR,并没有什么特别的地方,原则上任何工程都可以在VR设备下展示 一.新建一个名为“VRPawnBase”的Pawn. 二.在VRPawnBase中添加组件“Steam VRChaper ...
- mybatis的typeHandler
typeHandler作用: 1.传参时将javaType类型转换成jdbcType 2.结果集中ResultSet中取值时,jdbcType转换为javaType; 系统自定义的typeHandle ...
- (2) linux文件系统简介
bin -- 存放可执行的命令程序 sbin -- 系统管理相关的命令程序 boot -- 存放启动相关的内容 dev -- 存放设备和硬件 etc -- 存放程序,系统的配置文件 home -- 存 ...
- 系统计划 Cron作业 为什么/etc/crontab /etc/cron.d /etc/cron.* 那么多的定义方式????
当我们要增加全局性的计划任务时,一种方式是直接修改/etc/crontab.但是,一般不建议这样做,/etc/cron.d目录就是为了解决这种问题而创建的.例如,增加一项定时的备份任务,我们可以这样处 ...
- 配置yum源
本文转载:https://www.cnblogs.com/yangp/p/8506264.html (一)yum源概述 yum需要一个yum库,也就是yum源.默认情况下,CentOS就有一个yum源 ...