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的更多相关文章

  1. Springboot自带定时任务实现动态配置Cron参数

    同学们,我今天分享一下SpringBoot动态配置Cron参数.场景是这样子的:后台管理界面对定时任务进行管理,可动态修改执行时间,然后保存入库,每次任务执行前从库里查询时间,以达到动态修改Cron参 ...

  2. SpringBoot集成Quartz实现定时任务

    1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...

  3. SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)

    最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...

  4. SpringBoot系列:Spring Boot集成定时任务Quartz

    一.关于Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.在java企业级应用中,Q ...

  5. SpringBoot中的定时任务与Quartz的整合

    SpringBoot集成Quartz 定时任务Quartz : 就是在指定的时间执行一次或者循环执行,在项目的开发中有时候会需要的, 还是很有用的. SpringBoot内置的定时 添加依赖 < ...

  6. spring boot1.0 集成quartz 动态配置定时任务

    转载自 https://www.imooc.com/article/36278 一.Quartz简介了解 Quartz Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应 ...

  7. SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)

    使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. Quartz的4个核心概念: 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法v ...

  8. ssh中使用spring的集成quartz 编写定时任务

    之前没有使用框架开发时对于开发定时任务都是 使用java的原声timer类,重写线程的run方法跑要执行的任务.刚刚换的新公司,项目使用ssh2,目前该项目中的定时任务的使用spirng集成的quar ...

  9. Spring Boot集成quartz实现定时任务并支持切换任务数据源

    org.quartz实现定时任务并自定义切换任务数据源 在工作中经常会需要使用到定时任务处理各种周期性的任务,org.quartz是处理此类定时任务的一个优秀框架.随着项目一点点推进,此时我们并不满足 ...

随机推荐

  1. Spring Cloud(Dalston.SR5)--Zuul 网关-过滤器

    Spring Cloud 为 HTTP 请求的各个阶段提供了多个过滤器,这些过滤器的执行顺序由各自提供的一个 int 值决定,提供的值越小则优先级越高,默认的过滤器及优先级如下: 自定义过滤器 在默认 ...

  2. springboot @RequestBody使用JsonSerialize与 JsonDeserialize自定义转参数,处理Date日期格式

    JsonDeserialize: 1.请求接收的是一个json,并且由对象接收 @RequestMapping(value = "/query", method = {Reques ...

  3. JAVA AES CBC 加密 解密

    AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...

  4. springboot 中的commandLineRunners接口

    首先看实现了两个接口运行的顺序结果: My1: package com.example.commandlinerunner; import lombok.extern.java.Log;import ...

  5. reids高可用(灾难备份-持久化)

    java缓存存放到内存之中,当服务器重启以后,内存的数据将丢失,而reids作为缓存,重启reids以后 数据是不是也会丢失,redis服务器重启以后数据也不会丢失,这个是redis提供了持久化的功能 ...

  6. CentOS7和CentOS6怎样开启MySQL远程访问

    CentOS6开启MySQL远程访问 1.开放MySQL访问端口3306 修改防火墙配置文件 vi /etc/sysconfig/iptables  加入端口配置      -A INPUT -m s ...

  7. Oracle 关于concat与双竖线用法的补充

    --只能连接2个字符串select concat('nod',' chen is ') from dual; --连接2个列名select concat(name,ip2) from vm_info; ...

  8. GC(垃圾处理机制)面试题

    1: 详细解释Java中垃圾收集的主要流程.  垃圾收集主要有两种形式:手工.自动 自动会不定期进行回收,以释放无用的空间 手工调用的是System类中的gc()方法,此方法实际上调用的是Runtim ...

  9. Dubbo源码解析之registry注册中心

    阅读须知 dubbo版本:2.6.0 spring版本:4.3.8 文章中使用/* */注释的方法会做深入分析 正文注册中心是Dubbo的重要组成部分,主要用于服务的注册与发现,我们可以选择Redis ...

  10. Linux 实时查看tomcat 日志--less命令

    查看tomcat日志通常用 tail -n  或者 tail -f 或者grep 或者 vi cat等命令去查看异常信息,但是日志是在不停地刷屏,tail是动态的在变的,我们往往期望从日志最后一行往前 ...