使Spring Boot cron任务可配置

时间:2018-01-10 11:24:30

标签: spring-boot cron scheduled-tasks

Spring Boot允许您创建背景“类似cron”的任务,如下所示:

@Component
public class MyTask {
    // Every hour on the hour
    @Scheduled(cron = "0 0 0/1 1/1 * ? *")
    public void doSomething() {
        // blah whatever
    }
}

这使得自动化集成测试变得有点困难!我不应该只是暂停一个小时的运行集成测试,等待我的任务在一小时内运行时会发生什么。我也不应该等到接近一小时进行测试,以便我能在一小时内确认正确的行为!

有没有办法让这些cron值可配置?这样,如果我想在“测试模式”下运行我的应用,我可以安排MyTask#doSomething()方法比如每隔30秒运行等等。

2 个答案:

答案 0 :(得分:4)

您可以像这样配置cron表达式

@Scheduled(cron ="${some.trigger}") 

您可以在{/ 1}}文件中为dev / prod配置文件设置此值。因此,在测试模式下,您可以使用特定于配置文件的属性文件将其设置为您想要的任何值,例如application.properties

答案 1 :(得分:1)

您可以注释:

@Profile("!test")
@Component
public class MyTask {

然后测试应用程序属性应包含:

spring:
  profiles: test

这将禁用测试模式下的任务执行。

我会将任务执行的代码移动到一个单独的方法,并单独测试它而无需安排/等待。

相关问题