spring boot(学习笔记第十八课)
spring boot(学习笔记第十八课)
学习内容:
Spring boot的定时任务 Spring boot的Quartz
1. Spring boot的定时任务
定义定时任务
加入必要的依赖 < dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-web</ artifactId>
</ dependency>
在主类里面让scheduling
生效@SpringBootApplication
@EnableScheduling
public class DemoApplication {
定义component
,测试scheduling task
@Component
public class ScheduledJob {
@Scheduled ( fixedDelay = 1000 )
public void fixedDelay ( ) {
System . out. println ( "fixedDelay(1000ms):" + new Date ( ) ) ;
}
@Scheduled ( fixedRate = 2000 )
public void fixRate ( ) {
System . out. println ( "fixedRate(2000):" + new Date ( ) ) ;
}
@Scheduled ( initialDelay = 1000 , fixedRate = 2000 )
public void initialDelay ( ) {
System . out. println ( "initialDelay(1000),fixedRate(2000):" + new Date ( ) ) ;
}
@Scheduled ( cron = "0 * * * * ?" )
public void cron ( ) {
System . out. println ( "cron(0 * * * * ?):" + new Date ( ) ) ;
}
}
测试sheduled component
效果 cron
表达式Cron表达式是一种时间表达式,用于指定定时任务的时间、频率和间隔。它由6到7个字段组成,分别表示秒、分、时、日期、月份、星期和年份(可选)。Cron表达式的基本语法如下:
秒(0-59)
分(0-59)
时(0-23)
日期(1-31)
月份(1-12或JAN-DEC)
星期(0-7或SUN-SAT,其中0和7都表示周日)
年份(可选,1970-2099)
Cron表达式的字段之间用空格分隔,每个字段可以有特定的值、范围、通配符等来表示不同的时间模式。例如,*表示匹配所有可能的值,?用于日期和星期字段中的一个,表示不指定值,/用于指定数值的增量,如*/5表示每隔5个单位,-用于表示范围,如5-20表示从5到20的所有值。
Cron表达式的高级用法包括使用通配符、时间增量以及将多个表达式组合在一起,以指定更复杂的时间表。例如,0 8-12,14-18 * * *表示每天的8:00到12:00和14:00到18:00之间执行任务。
Cron表达式的应用广泛,包括在各种定时任务、日志清理、系统维护、数据备份等场景中使用,通过设置Cron表达式,可以自动化执行这些任务,提高系统效率和可靠性
2. Spring boot的Quartz
Spring boot Quatz
它是一个spring boot
的一个作业调度的框架,创建简单和复杂调度作业。 主要提供三种bean
JobDetail
Trigger
Scheduler
接下来练习如果使用这三种bean
来进行作业调度作业。 练习使用spring boot quartz
加入必要的依赖 < dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-quartz</ artifactId>
</ dependency>
定义jobDetail
的两个bean
注意第一个是bean
,第二个就是单纯的java class
@Component ( "MyFirstJob" )
public class MyFirstJob {
public void sayHello ( ) {
System . out. println ( "MyFirstJob:" + new Date ( ) ) ;
}
}
第二个是单纯的java class
@Data
public class MySecondJob extends QuartzJobBean {
private String name;
@Override
protected void executeInternal ( JobExecutionContext context) {
System . out. println ( "hello:" + name + new Date ( ) ) ;
}
}
将两个jobBean
进一步包装成jobDetail
,并以bean
的形式进行configuration
@Configuration
public class QuartzJobDetailConfig {
@Bean ( "jobDetail1" )
public MethodInvokingJobDetailFactoryBean jobDetail1 ( ) {
MethodInvokingJobDetailFactoryBean bean =
new MethodInvokingJobDetailFactoryBean ( ) ;
bean. setTargetBeanName ( "MyFirstJob" ) ;
bean. setTargetMethod ( "sayHello" ) ;
return bean;
}
@Bean ( "jobDetail2" )
JobDetailFactoryBean jobDetail2 ( ) {
JobDetailFactoryBean bean =
new JobDetailFactoryBean ( ) ;
bean. setJobClass ( MySecondJob . class ) ;
JobDataMap jobDataMap = new JobDataMap ( ) ;
jobDataMap. put ( "name" , "finlay" ) ;
bean. setJobDataMap ( jobDataMap) ;
return bean;
}
}
至此,已经定义了两个jobDetail
的bean
,分别是jobDetail1
和jobDetail2
。 接下来,定义Trigger
的bean
以及开启Scheduler
,对Trigger
进行调度。@Configuration
public class QuartzConfig {
@Autowired
@Qualifier ( "jobDetail1" )
public MethodInvokingJobDetailFactoryBean _jobDetail1;
@Autowired
@Qualifier ( "jobDetail2" )
public JobDetailFactoryBean _jobDetail2;
@Bean ( )
SimpleTriggerFactoryBean simpleTriggerFactoryBean ( ) {
SimpleTriggerFactoryBean bean =
new SimpleTriggerFactoryBean ( ) ;
bean. setJobDetail ( _jobDetail1. getObject ( ) ) ;
bean. setRepeatCount ( 3 ) ;
bean. setStartDelay ( 1000 ) ;
bean. setRepeatInterval ( 2000 ) ;
return bean;
}
@Bean
CronTriggerFactoryBean cronTriggerFactoryBean ( ) {
CronTriggerFactoryBean bean =
new CronTriggerFactoryBean ( ) ;
bean. setJobDetail ( _jobDetail2. getObject ( ) ) ;
bean. setCronExpression ( "* * * * * ?" ) ;
return bean;
}
@Bean
SchedulerFactoryBean schedulerFactoryBean ( ) {
SchedulerFactoryBean bean =
new SchedulerFactoryBean ( ) ;
SimpleTrigger simpleTrigger =
simpleTriggerFactoryBean ( ) . getObject ( ) ;
CronTrigger cronTrigger =
cronTriggerFactoryBean ( ) . getObject ( ) ;
bean. setTriggers ( simpleTrigger, cronTrigger) ;
return bean;
}
}
启动上面的spring boot quartz
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057245.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!