当前位置: 首页 > 知识库问答 >
问题:

如何在Spring有条件地启用或禁用计划作业?

夏朗
2023-03-14

我在Spring中使用@dischedure注释定义了使用cron样式模式的调度作业。

cron模式存储在配置属性文件中。实际上有两个属性文件:一个默认配置文件,一个与环境相关的配置文件(例如dev、test、prod customer1、prod customer2等)覆盖了一些默认值。

我在spring上下文中配置了一个属性占位符bean,它允许我使用${}样式的占位符从属性文件中导入值。

作业bean如下所示:

@Component
public class ImagesPurgeJob implements Job {

    private Logger logger = Logger.getLogger(this.getClass());

    @Override
    @Transactional(readOnly=true)
    @Scheduled(cron = "${jobs.mediafiles.imagesPurgeJob.schedule}")
    public void execute() {
        //Do something
            //can use DAO or other autowired beans here
    }
}

我的上下文XML的相关部分:

<!-- Enable configuration of scheduled tasks via annotations -->
    <task:annotation-driven/>

<!-- Load configuration files and allow '${}' style placeholders -->
    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:config/default-config.properties</value>
                <value>classpath:config/environment-config.properties</value>
            </list>
        </property>
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="false"/>
    </bean>
jobs.mediafiles.imagesPurgeJob.enable=true or false
jobs.mediafiles.imagesPurgeJob.schedule=0 0 0/12 * * ?

一个明显的变通方法是定义一个永远不会计算的cron模式,这样作业就永远不会执行。但是仍然会创建bean,而且配置会有点模糊,所以我觉得一定有更好的解决方案。

共有1个答案

秦德海
2023-03-14
@Component
public class ImagesPurgeJob implements Job {

    private Logger logger = Logger.getLogger(this.getClass());

    @Value("${jobs.mediafiles.imagesPurgeJob.enable}")
    private boolean imagesPurgeJobEnable;

    @Override
    @Transactional(readOnly=true)
    @Scheduled(cron = "${jobs.mediafiles.imagesPurgeJob.schedule}")
    public void execute() {

         //Do something
        //can use DAO or other autowired beans here
        if(imagesPurgeJobEnable){

            Do your conditional job here...

        }
    }
}
 类似资料:
  • 问题内容: 我正在使用注释在Spring中使用cron样式模式定义计划的作业。 Cron模式存储在配置属性文件中。实际上,有两个属性文件:一个默认配置,一个与环境相关的配置文件配置(例如dev,test,prod客户1,prod客户2等),并覆盖某些默认值。 我在春天的上下文中配置了一个属性占位符bean,这使我可以使用样式占位符从属性文件中导入值。 工作豆看起来像这样: 我的上下文XML的相关部

  • 在Spring Boot application中,我使用@Schedured注释,使用cron样式模式来调度作业。 或者,当达到所需状态时,是否有其他方法禁用数据库轮询?

  • 我有一个spring boot应用程序,我需要每20秒刷新一次,所以我创建了这个: 它工作得很好,但当我向数据库中添加行时,在它为空之前,我想再次将计时器重置为20秒,有办法吗?

  • 我想实现下面的用例——我的Spring Boot应用程序应该只在应用程序中有某个属性时启动。yaml设置为: 如果未设置该属性,则上下文初始化将失败,并显示一条消息,表明该属性丢失。 我在这个主题中找到了如何实现它:Spring启动-检测和终止,如果属性没有设置?但是我不能遵循这种方法的问题是,在加载检查此属性的bean之前,上下文初始化可能会失败。 例如,如果其他bean由于缺少另一个属性而无法

  • 我找不到任何选项、设置或键盘快捷键来禁用或隐藏那个烦人的滚动条。我只是觉得它没有用,而且很分散注意力。 也不能像Atom一样编辑编辑器的CSS。

  • 我需要同一个锚链接有条件地指向本地或外部资源。我试过了 但是不管用。我没有得到任何错误,但它指向同一个本地页面,忽略了外部URL。有什么想法吗? 另一种选择是构建链接,但我找不到任何文档如何在服务内部访问 编辑:我知道我可以用克隆整个链接,但我不想这样做,我的链接包含一个带有一系列选项的视频标签