如何在春季按配置文件启用@Scheduled作业?

2022-09-03 05:21:40

如何仅在特定配置文件中启用计划作业?

伪代码:

@Scheduled(cron = "${job.cron}")
@Profile("prod")
public void runJob() {

}

这可能吗?


答案 1

每个配置文件应该有一个 Bean:

@Component
@Profile("prod")
public class ProdJob {

    @Scheduled(cron = "${job.cron}")
    public void runJob() {

    }

}

@Component
@Profile("beta")
public class BetaJob {

    @Scheduled(cron = "${job.cron}")
    public void runJob() {

    }
}

答案 2

您可以使用以下方法执行此操作。几乎就像您已经做过的那样,但是添加冒号,然后添加默认值,如果未找到属性,则应选择该值。在这里,我们使用'-'作为cron禁用表达式:

@Scheduled(cron = "${job.cron:-}")
public void runJob() {

}

然后在所需的配置文件中定义 cron 表达式(例如,使用属性文件)。

下面是 application-prod.properties 的内容:

job.cron=*/30 * * * * *

在这里,对于prod profile,它将每30秒启动一次,对于所有其他配置文件,它将关闭。


推荐