在我们的系统中,我们使用一个设置类来指向属性文件,根据不同的事件加载不同的属性文件。要访问特定属性,我们调用“Settings.getString('property_name_here')”。
在我的代码中,我将计划表达式 (@scheduled cron expression) 加载到一个变量中,并尝试将其传递给 @scheduled 注释,但它不起作用。
以下是我的代码:
在属性文件中:
cron.second=0
cron.min=1
cron.hour=14
在构造函数中,我有以下内容:
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表达式。
在计划任务中,我有:
@Scheduled(cron = "${this.cronExpression}")
public void scheduleTask() throws Exception {
....
}
当我运行代码时,它报错了:
Caused by: java.lang.IllegalStateException: 遇到无效的 @Scheduled 方法 'scheduleTask':Cron 表达式必须由 6 个字段组成(在 "${this.cronExpression}" 中找到 1 个)
然后我将 this.cronExpression 更改为字符串列表:
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表达式应该是什么?