不确定这是纯粹的Spring Boot问题,纯粹是Groovy问题,还是使用Groovy构建Spring Boot应用程序引起的问题。我有一个Spring Boot后台任务 - 在生产中 - 我想每小时运行一次:
@Component
class MyTask {
@Scheduled(cron = "${tasks.mytask.cron}")
void doSomething() {
// blah whatever
}
}
在我的application.yml
文件中,我有:
logging:
config: 'logback.groovy'
server:
port: 9200
error:
whitelabel:
enabled: false
spring:
cache:
type: none
myapp:
detailsMode: ${detailsMode:Terse}
verification: 5
tasks:
mytask:
cron: '0 0/1 * 1/1 * ? *'
然而,对于本地开发,我希望能够更改cron表达式(用于测试等)。当我去编译这个时,我得到:
Expected '$tasks.mytask.cron' to be an inline constant of type java.lang.String in @org.springframework.scheduling.annotation.Scheduled
@ line 31, column 23.
@Scheduled(cron = "${tasks.mytask.cron}")
我需要做些什么才能解决这个问题?我需要一个外部可配置的值,例如tasks.mytask.cron
,我可以在我的应用属性/ YAML中定义。
答案 0 :(得分:1)
myapp:
detailsMode: ${detailsMode:Terse}
verification: 5
tasks:
mytask:
cron: '0 0/1 * 1/1 * ?'
或
@Scheduled(cron = '${myapp.tasks.mytask.cron}')
还要注意你的cron格式不正确