@ConfigurationProperties(prefix = "scheduler.task-rate")
public class SchedulerConfig {
private String corn;
private Integer fixedDelay;
private Integer initialDelay;
public String getCorn() {
return corn;
public void setCorn(String corn) {
this.corn = corn;
public Integer getFixedDelay() {
return fixedDelay;
public void setFixedDelay(Integer fixedDelay) {
this.fixedDelay = fixedDelay;
public Integer getInitialDelay() {
return initialDelay;
public void setInitialDelay(Integer initialDelay) {
this.initialDelay = initialDelay;
1. 使用"#{}",即使用bean.attr的方式获取值
首先,创建bean:
@Bean
public SchedulerConfigHolder schedulerConfigPublic(SchedulerConfig schedulerConfig) {
SchedulerConfigHolder schedulerConfigHolder = new SchedulerConfigHolder();
schedulerConfigHolder.setSchedulerConfig(schedulerConfig);
// schedulerConfigHolder.setCorn(schedulerConfig.getCorn());
// schedulerConfigHolder.setInitialDelay(schedulerConfig.getInitialDelay());
// schedulerConfigHolder.setFixedDelay(schedulerConfig.getFixedDelay());
return schedulerConfigHolder;
a. SpEL支持的bean方式需要先给bean注册到bean resolver,实现查找bean,这里直接利用spring的机制,交给spring创建bean后等于直接被管理了。
b. 这里为了顺便证明"#{}"中使用的是bean的名称来获取的bean,所以在@Bean下,使用的method名称为“schedulerConfigPublic"
c. SchedulerConfig 虽然用@ConfigurationProperties注解了,但依然是不能被SpEL使用的。
接下来使用@Sheduled注解:绑定一个Scheduler
@Component
public class TaskRateScheduler {
@Scheduled(fixedDelayString = "#{schedulerConfigPublic.fixedDelay}",initialDelayString = "#{schedulerConfigPublic.initialDelay}")
public void valuateTaskRate() {
//do something...
注意:使用的bean名称是schedulerConfigPublic
2. 使用“#{@}”,以直接使用bean的方式传递参数值
首先,定义两个bean:
@Bean
public Integer fixedDelay(SchedulerConfig schedulerConfig) {
return schedulerConfig.getFixedDelay();
@Bean
public Integer initialDelay(SchedulerConfig schedulerConfig) {
return schedulerConfig.getInitialDelay();
接下来使用@Sheduled注解:绑定一个Scheduler
@Component
public class TaskRateScheduler {
@Scheduled(fixedDelayString = "#{@fixedDelay}", initialDelayString = "#{@initialDelay}")
public void valuateTaskRate() {
//do something...
说明:@符号后面衔接bean的名称
利用SpEL实现。我实验了两种方式:1. 使用"#{}"2. 使用“#{@}”以下:首先。属性:scheduler: task-rate: corn: 0/15 * * * * * fixed-delay: 15000 initial-delay: 30000对应的properties实体类:@ConfigurationProperties(prefix = "scheduler.task-rate")public class Sched
通过配置开关 Spring Boot 中的 @Scheduled 定时任务
Spring Boot 中提供了一种非常简单的定时任务的实现方式 @Scheduled 注解,只需要加两个注解就可以轻松搞定。
1. 快速上手 @Scheduled
在 Spring Boot 中要想使用 @Scheduled 注解,先要在启动类上加上注解 @EnableScheduling
@Configuration
@EnableScheduling
public class ScheduleConfig {
@Scheduled(fixedDelayString = “${test.delay}“)
其中 test.delay为yml或properties配置值中的自定义配置值
@Schedule参数 fixedRate 与 fixedDelay 的区别
简单来说: fixedRate 任务两次执行时间间隔是任务的开始点,而 fixedDelay 的间隔是前次任务的结束与下次任务的开始。
1. 对于 fixRate , 当任务时长超过 fixedRate 时,会在上次任务执行完后
SpringBoot设置定时任务
使用定时任务完成一些业务逻辑,比如天气接口的数据获取,定时发送短信,邮件。以及商城中每天用户的限额,定时自动收货等等。定时器在项目中是常常会使用到的一个手段。
定时任务在Spring Boot中的集成
1.创建SpringBoot 项目
1.1 创建 SpringBoot 项目 (不需要添加任何模块)
1.2、在 @SpringBootApplication 注解的主入口类,添加 @EnableScheduling注解来开启定时任务。
@SpringBootApplicat
@Component
@PropertySource(value = "classpath:jobTask.properties",encoding = "UTF-8")
public class InactiveAccountJob {
@Scheduled(cron = "${inactiveaccountCron}")
public void syncInactiveAccount() {
resources/jobTask.properties
inactiv.
SpringBoot定时任务@Scheduled注解
Spring中的@Scheduled可以进行定时任务开发,定时执行方法。
首先要在执行类加注解@EnableScheduling,具体方法上加@Scheduled
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springfra
@Scheduled是Spring框架提供的一个注解,用于实现任务调度和异步方法执行。它可以与方法一起使用,在方法上添加@Scheduled注解和触发器元数据,来定义方法的执行时间和频率。
@Scheduled注解可以通过设置不同的属性来指定任务的执行时间和频率,例如cron表达式、固定延迟、固定间隔等。这样,在满足条件的情况下,Spring框架会自动调用被@Scheduled注解修饰的方法来执行任务。
要在Spring配置文件中启用@Scheduled注解,需要在配置文件中添加命名空间task,并引入对应的schema。例如,在applicationConfig.xml文件中添加以下内容:
```xml
<beans xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<!-- 配置任务调度相关的bean和配置 -->
</beans>
这样就可以在Spring应用程序中使用@Scheduled注解来实现任务调度功能了。
Error:java: 无法访问org.apache.http.annotation.ThreadSafe 找不到org.apache.http.annotation.ThreadSafe的类文件
12003