首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot @Scheduled cron

Spring Boot @Scheduled cron
EN

Stack Overflow用户
提问于 2016-03-25 00:10:24
回答 3查看 12.6K关注 0票数 13

在Spring的@Scheduled cron配置中,有没有办法从propertyClass调用getter (甚至是变量)?以下代码无法编译:

@Scheduled(cron = propertyClass.getCronProperty())@Scheduled(cron = variable)

我想避免直接获取属性:

代码语言:javascript
复制
@Scheduled(cron = "${cron.scheduling}")
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-05 23:58:34

简而言之--开箱即用是不可能的。

@Scheduled注释中作为"cron expression“传递的值在ScheduledAnnotationBeanPostProcessor类中使用StringValueResolver接口的实例进行处理。

StringValueResolver有3个开箱即用的实现--针对Placeholder (例如${})、针对Embedded值和针对Static字符串--没有一个能够实现您想要的结果。

如果您必须不惜一切代价避免在注释中使用属性占位符,请删除注释并以编程方式构造所有内容。您可以使用ScheduledTaskRegistrar注册任务,这正是@Scheduled注释实际做的事情。

我会建议使用任何最简单的解决方案,只要能起作用并通过测试。

票数 11
EN

Stack Overflow用户

发布于 2021-07-24 07:33:05

如果您不想从属性文件中检索cron表达式,您可以按如下所示进行编程:

代码语言:javascript
复制
// Constructor
public YourClass(){
   Properties props = System.getProperties();
   props.put("cron.scheduling", "0 30 9 * * ?");
}

这允许你使用你的代码,而忽略任何更改:

代码语言:javascript
复制
@Scheduled(cron = "${cron.scheduling}")
票数 2
EN

Stack Overflow用户

发布于 2016-04-05 15:52:10

代码语言:javascript
复制
@Component
public class MyReminder {

    @Autowired
    private SomeService someService;

    @Scheduled(cron = "${my.cron.expression}")
    public void excecute(){
        someService.someMethod();
    }
}

在/src/main/resources/application.properties中

代码语言:javascript
复制
my.cron.expression = 0 30 9 * * ?
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36204858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档