我有一个定期运行的Spring计划方法:
@Scheduled(cron = "${spring.cron.expression}")
public void demonJob() throws .. { .. }
Run Code Online (Sandbox Code Playgroud)
cron表达式已成功读取application.properties
:
spring.cron.expression=0 0 * * * *
Run Code Online (Sandbox Code Playgroud)
现在,我想将我的应用程序部署到一个特殊的环境,在该环境中不应该运行这个特定的Scheduled方法.如果我像这样将cron属性留空
spring.cron.expression=
Run Code Online (Sandbox Code Playgroud)
..我得到以下异常:
Encountered invalid @Scheduled method 'demonJob': Cron expression must consist of 6 fields (found 0 in "")
Run Code Online (Sandbox Code Playgroud)
如何优雅地禁用Scheduled方法,理想情况下只能通过提供不同的设置application.properties
?
空字符串是一个不正确的cron表达式.如果要在特定条件下禁用调度程序,只需使用@Profile
注释,或者如果必须使用@ConditionalOnProperty
Spring Boot中的属性使用注释.
@Component
@ConditionalOnProperty(prefix = "spring.cron", name = "expression")
public class MyScheduler {
@Scheduled(cron = "${spring.cron.expression}")
public void demonJob() throws .. { .. }
}
Run Code Online (Sandbox Code Playgroud)
从 Spring 5.1.0 开始,一种选择是使用“-”作为 cron 表达式,因为@Scheduled
注释接受它作为 cron 表达式以禁用 cron 触发器。
特殊值“-”表示禁用的 cron 触发器,主要用于由 ${...} 占位符解析的外部指定值。
对于您的特定示例,您只需将其指定为spring.cron.expression
变量。如果您使用的是 Spring Boot,您可以使用许多可用于此目的的外部化配置选项之一,包括:
如果这不是 Spring Boot 项目,您仍然可以指定此属性,尽管这样做的机制将不那么标准并且更特定于项目。
归档时间: |
|
查看次数: |
6054 次 |
最近记录: |