如何在春季通过个人资料启用@Scheduled作业?

mem*_*und 11 java spring spring-boot

我怎样才能在特定的配置文件中启用预定作业?

伪代码:

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

}
Run Code Online (Sandbox Code Playgroud)

那可能吗?

Fed*_*ner 14

每个配置文件应该有一个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() {

    }
}
Run Code Online (Sandbox Code Playgroud)


ale*_*kov 7

您可以使用以下方法来完成。几乎和您已经做的一样,但是添加冒号,然后添加如果未找到属性则应选择的默认值。这里我们使用“-”作为 cron 禁用表达式:

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

}
Run Code Online (Sandbox Code Playgroud)

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

这是 application-prod.properties 内容:

job.cron=*/30 * * * * *
Run Code Online (Sandbox Code Playgroud)

对于产品配置文件,它将每 30 秒启动一次,对于所有其他配置文件,它将关闭。