首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring @scheduled cron with variable

spring @scheduled cron with variable
EN

Stack Overflow用户
提问于 2018-01-19 08:27:46
回答 1查看 10.3K关注 0票数 8

在我们的系统中,我们使用一个设置类来指向属性文件,这取决于它加载不同的属性文件。为了访问特定的属性,我们调用'Settings.getString('property_name_here')‘。

在我的代码中,我将@scheduled cron表达式加载到一个变量,并尝试传递给@scheduled注释,但它不起作用,

下面是我的代码:在属性文件中:

代码语言:javascript
复制
cron.second=0
cron.min=1
cron.hour=14

在构造函数中,我有:

代码语言:javascript
复制
this.cronExpression = new StringBuilder()
            .append(settings.getString("cron.second"))
            .append(" ")
            .append(settings.getString("cron.min"))
            .append(" ")
            .append(settings.getString("cron.hour"))
            .append(" ")
            .append("*").append(" ").append("*").append(" ").append("*")
            .toString();

创建了一个字符串"0 1 14 ** *",它是一个有效的con表达式

在计划任务中,我有:

代码语言:javascript
复制
@Scheduled(cron = "${this.cronExpression}")
public void scheduleTask() throws Exception {
         ....
 }

当我运行代码时,它抱怨:原因: java.lang.IllegalStateException:遇到无效的@Scheduled方法'scheduleTask':Cron表达式必须由6个字段组成(在“${this.cronExpression}”中找到1)

然后,我将this.cronExpression更改为一个字符串列表:

代码语言:javascript
复制
    this.cronExpression = Lists.newArrayList();
    this.cronExpression.add(settings.getString("cron.second"));
    this.cronExpression.add(settings.getString("cron.min"));
    this.cronExpression.add(settings.getString("cron.hour"));
    this.cronExpression.add("*");
    this.cronExpression.add("*");
    this.cronExpression.add("*");

但是仍然得到相同的错误,那么cron表达式到底应该是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2018-11-13 20:07:06

我的所作所为对我很管用:

在属性文件中:

代码语言:javascript
复制
my.cron.expression=0 3 * * * ?

在代码中:

代码语言:javascript
复制
@Scheduled(cron = "${my.cron.expression}")
public void scheduleTask(){
  ...
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48332442

复制
相关文章

相似问题

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