基于Groovy的Spring Boot任务在配置的cron上窒息

时间:2018-01-11 18:37:59

标签: spring-boot groovy

不确定这是纯粹的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中定义。

1 个答案:

答案 0 :(得分:1)

myapp:
  detailsMode: ${detailsMode:Terse}
  verification: 5

tasks:
  mytask:
    cron: '0 0/1 * 1/1 * ?'

@Scheduled(cron = '${myapp.tasks.mytask.cron}')

还要注意你的cron格式不正确