spring @Scheduled 属性值从yml中获取

2 篇文章 0 订阅

利用SpEL实现。

我实验了两种方式:

1. 使用"#{}"

2. 使用“#{@}”

以下:

首先。属性:

scheduler:
  task-rate:
    corn: 0/15 * * * * *
    fixed-delay: 15000
    initial-delay:  30000

对应的properties实体类:


@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的名称

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值