- 浏览: 3518467 次
- 性别:
- 来自: 大连
博客专栏
-
使用Titanium Mo...
浏览量:37581
-
Cordova 3.x入门...
浏览量:604655
-
常用Java开源Libra...
浏览量:678526
-
搭建 CentOS 6 服...
浏览量:87560
-
Spring Boot 入...
浏览量:400049
-
基于Spring Secu...
浏览量:69132
-
MQTT入门
浏览量:90649
文章分类
最新评论
-
afateg:
阿里云的图是怎么画出来的?用什么工具?
各云服务平台的架构图 -
cbn_1992:
博主,采用jdbctoken也就是数据库形式之后,反复点击获取 ...
Spring Security OAuth2 Provider 之 数据库存储 -
ipodao:
写的很是清楚了,我找到一份中文协议:https://mcxia ...
MQTT入门(6)- 主题Topics -
Cavani_cc:
还行
MQTT入门(6)- 主题Topics -
fexiong:
博主,能否提供完整源码用于学习?邮箱:2199611997@q ...
TensorFlow 之 构建人物识别系统
主要用于定时发送邮件、夜间自动维护等。
(1)开启定时任务功能
*** Spring4只允许定义一个TaskScheduler。
(2)定义定时任务
1)@Scheduled注解
2)实现SchedulingConfigurer
3)动态定义
TaskScheduler(ThreadPoolTaskScheduler)、Trigger(CronTrigger、PeriodicTrigger)。
(3)规则定义到配置文件
application.properties
(4)集群下的定时任务
1)通过AOP拦截限定定时任务的启动
多服务器的时候,不能所有服务器都同时执行定时任务,最简单的方法是只让特殊的服务才执行执行定时任务。
application.properties
2)集成Quartz Scheduler
Quartz的集群方案是基于数据库的,与Spring无缝对接。
a)导入jar
b)将Quartz所需的表Schema导入数据库
从 http://www.quartz-scheduler.org/downloads/ 下载quartz-2.2.3-distribution.tar.gz后,quartz-2.2.3-distribution.tar.gz\quartz-2.2.3\docs\dbTables\ 里边有表结构定义DDL,大概11个表。
c)配置Quartz
quartz properties
application.properties
c)定义Job
基于org.quartz.Job
基于org.springframework.scheduling.quartz.QuartzJobBean
(1)开启定时任务功能
@Configuration @EnableScheduling public class SpringTaskScheduleConfig { @Bean public TaskScheduler poolScheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setThreadNamePrefix("poolScheduler"); scheduler.setPoolSize(10); return scheduler; } }
*** Spring4只允许定义一个TaskScheduler。
(2)定义定时任务
1)@Scheduled注解
@Scheduled(cron="*/5 * * * * MON-FRI") public void doSomeTask(){ }
@Scheduled(fixedDelay = 2000) public void fixedDelayJob() { }
@Scheduled(fixedRate = 2000) public void fixedRateJob() { }
- Cron – 自由指定时间
- FixedRate – 开始后计时
- FixedDelay – 完成后计时
2)实现SchedulingConfigurer
@Configuration public class MySchedulingConfigurer implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setTaskScheduler(poolScheduler()); // add job taskRegistrar.addFixedRateTask(new IntervalTask( new Runnable() { @Override public void run() { System.out.println("Job @ fixed rate " + new Date() + ", Thread name is " + Thread.currentThread().getName()); } }, 1000, 0)); } @Bean public TaskScheduler poolScheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setThreadNamePrefix("poolScheduler"); scheduler.setPoolSize(10); return scheduler; } }
3)动态定义
TaskScheduler(ThreadPoolTaskScheduler)、Trigger(CronTrigger、PeriodicTrigger)。
ThreadPoolTaskScheduler scheduler = (ThreadPoolTaskScheduler) appContext.getBean("scheduler"); CronTrigger trigger = new CronTrigger("0 0/5 * * * ?"); // Every 5 minutes ScheduledFuture<Object> scedulefuture = scheduler.schedule(taskObject, trigger);
(3)规则定义到配置文件
application.properties
引用
cron.expression=0 0 0/1 * * ?
task.exec.time.delayed=5000
task.exec.time.delayed=5000
@Scheduled(cron = "${cron.expression}") public void demoServiceMethod() { } @Scheduled(fixedDelayString = "${task.exec.time.delayed}") public void autoProcess() { }
(4)集群下的定时任务
1)通过AOP拦截限定定时任务的启动
多服务器的时候,不能所有服务器都同时执行定时任务,最简单的方法是只让特殊的服务才执行执行定时任务。
application.properties
引用
batch.exec.host=192.168.1.100
@Aspect @Component public class TaskInterceptor { @Value(“${batch.exec.host}”) String batchExecHost; @Around("execution(* com.rensanning.task..*.*(..)) && @annotation(org.springframework.scheduling.annotation.Scheduled)") public Object around(ProceedingJoinPoint pjp) throws Throwable { String methodName = pjp.getSignature().getName(); String currentThread = Thread.currentThread().getName(); if (!allowedBatchExec()) { log.info("Skip batch ({}): {}", currentThread, methodName); return null; } log.info("Begin batch ({}): {}", currentThread, methodName); Stopwatch stopWatch = Stopwatch.createStarted(); try { return pjp.proceed(); } catch (Exception e) { log.error("batch error: {}", methodName, e); return null; } finally { log.info("End batch ({}): {}, elapsed = {} (ms)", currentThread, methodName, stopWatch.elapsed(TimeUnit.MILLISECONDS)); } } private boolean allowedBatchExec() { if (getHostName().equals(batchExecHost)) { return true; } return false; } }
2)集成Quartz Scheduler
Quartz的集群方案是基于数据库的,与Spring无缝对接。
a)导入jar
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.3</version> </dependency>
b)将Quartz所需的表Schema导入数据库
从 http://www.quartz-scheduler.org/downloads/ 下载quartz-2.2.3-distribution.tar.gz后,quartz-2.2.3-distribution.tar.gz\quartz-2.2.3\docs\dbTables\ 里边有表结构定义DDL,大概11个表。
c)配置Quartz
@Configuration public class ConfigureQuartz { @Bean public SpringBeanJobFactory jobFactory(ApplicationContext applicationContext) { AutoWiringSpringBeanJobFactory jobFactory = new AutoWiringSpringBeanJobFactory(); jobFactory.setApplicationContext(applicationContext); return jobFactory; } @Bean public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory, @Qualifier("sampleJob1Trigger") Trigger trigger1, @Qualifier("sampleJob2Trigger") Trigger trigger2) throws IOException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setOverwriteExistingJobs(true); factory.setAutoStartup(true); factory.setStartupDelay(20); factory.setJobFactory(jobFactory); factory.setQuartzProperties(quartzProperties()); factory.setTriggers(trigger1, trigger2); return factory; } @Bean(name = "sampleJob1Detail") public JobDetailFactoryBean sampleJob1Detail() { return createJobDetail(SampleJob1.class); } @Bean(name = "sampleJob2Detail") public JobDetailFactoryBean sampleJob2Detail() { return createJobDetail(SampleJob2.class); } @Bean(name = "sampleJob1Trigger") public CronTriggerFactoryBean sampleJob1Trigger(@Qualifier("sampleJob1Detail") JobDetail jobDetail, @Value("${cron.job1.expression}") String job1CronExp) { return createCronTrigger(jobDetail, job1CronExp); } @Bean(name = "sampleJob2Trigger") public CronTriggerFactoryBean sampleJob2Trigger(@Qualifier("sampleJob2Detail") JobDetail jobDetail, @Value("${cron.job2.expression}") String job2CronExp) { return createCronTrigger(jobDetail, job2CronExp); } @Bean public Properties quartzProperties() throws IOException { PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); propertiesFactoryBean.setLocation(new ClassPathResource("quartz.properties")); propertiesFactoryBean.afterPropertiesSet(); return propertiesFactoryBean.getObject(); } private JobDetailFactoryBean createJobDetail(Class<?> jobClass) { JobDetailFactoryBean factoryBean = new JobDetailFactoryBean(); factoryBean.setJobClass(jobClass); factoryBean.setDurability(true); return factoryBean; } private CronTriggerFactoryBean createCronTrigger(JobDetail jobDetail, String cronExpression) { CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean(); factoryBean.setJobDetail(jobDetail); factoryBean.setCronExpression(cronExpression); factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW); return factoryBean; } }
public class AutoWiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private transient AutowireCapableBeanFactory beanFactory; @Override public void setApplicationContext(final ApplicationContext context) { beanFactory = context.getAutowireCapableBeanFactory(); } @Override protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception { final Object job = super.createJobInstance(bundle); beanFactory.autowireBean(job); return job; } }
quartz properties
引用
org.quartz.scheduler.instanceName=ClusteredScheduler
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.makeSchedulerThreadDaemon=true
org.quartz.scheduler.skipUpdateCheck=true
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.makeThreadsDaemons=true
org.quartz.threadPool.threadCount=20
org.quartz.threadPool.threadPriority=5
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.dataSource=myDS
org.quartz.jobStore.misfireThreshold=25000
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=20000
org.quartz.dataSource.myDS.driver=org.postgresql.Driver
org.quartz.dataSource.myDS.URL=jdbc:postgresql://localhost:5432/test
org.quartz.dataSource.myDS.user=postgres
org.quartz.dataSource.myDS.password=postgres
org.quartz.dataSource.myDS.maxConnections=5
org.quartz.dataSource.myDS.validationQuery=select 1
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.makeSchedulerThreadDaemon=true
org.quartz.scheduler.skipUpdateCheck=true
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.makeThreadsDaemons=true
org.quartz.threadPool.threadCount=20
org.quartz.threadPool.threadPriority=5
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.dataSource=myDS
org.quartz.jobStore.misfireThreshold=25000
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=20000
org.quartz.dataSource.myDS.driver=org.postgresql.Driver
org.quartz.dataSource.myDS.URL=jdbc:postgresql://localhost:5432/test
org.quartz.dataSource.myDS.user=postgres
org.quartz.dataSource.myDS.password=postgres
org.quartz.dataSource.myDS.maxConnections=5
org.quartz.dataSource.myDS.validationQuery=select 1
application.properties
引用
cron.job1.expression=0 0/3 * * * ?
cron.job2.expression=0 0/5 * * * ?
cron.job2.expression=0 0/5 * * * ?
c)定义Job
基于org.quartz.Job
@Component @DisallowConcurrentExecution public class SampleJob1 implements Job { @Autowired private SampleJobService jobService; public void execute(JobExecutionContext context) throws JobExecutionException { jobService.executeSampleJob1(); } }
基于org.springframework.scheduling.quartz.QuartzJobBean
@Component @DisallowConcurrentExecution public class SampleJob2 extends QuartzJobBean { @Autowired private SampleJobService jobService; @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { jobService.executeSampleJob2(); } }
@Service public class SampleJobService { public void executeSampleJob1() { System.out.println(" hello job 1. "); } public void executeSampleJob2() { System.out.println(" hello job 2. "); } }
发表评论
-
Spring Boot 入门 - 进阶篇(8)- 应用监控(Actuator)
2017-03-16 14:57 17510作为Spring Boot的另外一大亮点,就是actuator ... -
Spring Boot 入门 - 进阶篇(7)- 自动配置(AutoConfigure)
2017-03-16 11:05 62147自动配置是Spring Boot的最大亮点,完美的展示了CoC ... -
Spring Boot 入门 - 进阶篇(6)- 启动加载(CommandLineRunner)
2017-03-15 15:04 14985启动成功后可以通过以下方法运行自己的初始代码: @PostCo ... -
Spring Boot 入门 - 进阶篇(5)- 数据缓存(@Cacheable)
2017-03-14 16:28 34577缓存可以缓解数据库访 ... -
Spring Boot 入门 - 进阶篇(4)- REST访问(RestTemplate)
2017-03-14 11:07 45186经常需要发送一个GET/POST请求到其他系统(REST AP ... -
Spring Boot 入门 - 进阶篇(2)- 异步调用(@Async)
2017-03-07 15:59 20006异步处理 Java的异步处理Thread/Runnable、 ... -
Spring Boot 入门 - 进阶篇(1)- Servlet、Filter、Listener、Interceptor
2017-03-07 10:39 10553用户认证授权、日志记录MDC、编码解码、UA检查、多端对应等都 ... -
Spring Boot 入门 - 基础篇(15)- 工程部署
2017-02-16 15:31 9008(1)开发阶段 一般开发过程: 1)-写代码 2)- [Ru ... -
Spring Boot 入门 - 基础篇(14)- 参数设置
2017-02-16 15:25 5685(1)读取优先顺序 a - 命令行参数 --key=val ... -
Spring Boot 入门 - 基础篇(13)- 异常处理
2017-02-16 10:23 8616先要了解Spring的异常处理:http://rensanni ... -
Spring Boot 入门 - 基础篇(12)- 数据校验
2017-02-16 09:53 19777除过在客户端做JavaScript数据校验外,服务器端做数据校 ... -
Spring Boot 入门 - 基础篇(11)- 数据源配置
2017-02-15 11:12 16331(1)单一数据源 默认Spring Boot会在classp ... -
Spring Boot 入门 - 基础篇(10)- 发送邮件
2017-02-14 10:04 2437(1)配置 pom.xml <dependency> ... -
Spring Boot 入门 - 基础篇(9)- 文件上传下载
2017-02-14 10:01 15800(1)单文件上传 Form方式 <form id=&qu ... -
Spring Boot 入门 - 基础篇(8)- 数据库操作
2017-02-10 16:17 8611(1)导入mybatis-spring-boot-starte ... -
Spring Boot 入门 - 基础篇(7)- 国际化
2017-02-10 13:58 13082Spring Boot默认支持国际化配置,只需要添加配置文件即 ... -
Spring Boot 入门 - 基础篇(6)- 页面模板
2017-02-09 15:00 6407Spring Boot支持很多模板引擎,但嵌入式容器JSP有限 ... -
Spring Boot 入门 - 基础篇(5)- 使用WebJars
2017-02-09 14:20 11677WebJars能使Maven的依赖管理支持OSS的JavaSc ... -
Spring Boot 入门 - 基础篇(4)- 静态资源
2017-02-09 13:10 10653静态资源包括:HTML、CSS、JS、图像、视频、PDF/Of ... -
Spring Boot 入门 - 基础篇(3)- 日志管理
2017-02-09 09:39 8430Spring Boot支持JUL,Log4J2和Logback ...
相关推荐
spring boot @scheduled注解 cron 表达式实现计划任务调度。
Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析,做了一些测试说明了各个参数的作用
通过本文,读者将能够了解如何在Spring Boot应用中轻松创建和管理定时任务。 # @Scheduled注解简介 在Spring框架中,@Scheduled注解用于标记一个方法,使其能够在固定的时间间隔内自动执行。这个注解主要基于Java的...
主要介绍了spring-boot通过@Scheduled配置定时任务,文中还给大家介绍了springboot 定时任务@Scheduled注解的方法,需要的朋友可以参考下
spring boot工程的定时任务
在不停服务的情况下,动态修改Spring定时任务的执行周期,即动态修改定时任务的cron参数。
spring-boot 2.0.2 数据库配置定时任务。spring-boot 2.0.2.RELEASE,将定时任务配置在数据库,启动项目的时候,用mybatis读取数据库,实例化对象,并设定定时任务。如果需要新增,减少,修改定时任务,仅需要修改...
- chapter4-1-1:[使用@Scheduled创建定时任务](http://blog.didispace.com/springbootscheduled/) - chapter4-1-2:[使用@Async实现异步调用](http://blog.didispace.com/springbootasync/) #### 日志管理 - ...
本篇文章中主要介绍了Spring Boot中使用@Scheduled创建定时任务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
本案例采用SpringBoot+Quartz实现了多个定时任务同时调度执行,运行测试通过,案例只编写了2个任务,如果要加更多任务,按注释添加即可。
主要介绍了spring 定时任务@Scheduled的相关资料,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友们下面来一起看看吧。
spring @Scheduled定时任务代码
我们都知道任务调度可以用Quartz,但对于简单的定时任务,可以直接用Spring内置的Schedule来实现。本案例实现了一个非常简单的任务调度。
使用spring @Scheduled注解执行定时任务
主要介绍了springboot 定时任务@Scheduled实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Spring boot如何通过@Scheduled实现定时任务及多线程配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Spring boot开启定时任务的三种方式 零、前言 第一种也就是最简单的一种:基于注解 (@Scheduled)的方式; 第二种:基于接口 (SchedulingConfigurer); 第三种:基于注解设定多线程定时任务。 一、基于@Scheduled注解...
chapter4-1-1:使用@Scheduled创建定时任务 chapter4-1-2:使用@Async实现异步调用 chapter4-1-3:使用@Async实现异步调用:自定义线程池 chapter4-1-4:使用@Async实现异步调用:资源优雅关闭 chapter4-1-5:使用@...
1.在Spring Boot中,你可以使用@Scheduled注解来创建定时任务。将@Scheduled注解与方法一起使用,指定任务执行的时间表达式。 2.使用Spring的TaskScheduler: Spring提供了TaskScheduler接口和相关实现,用于任务...