使用属性文件中的cron表达式进行任务调度

使用属性文件中的cron表达式进行任务调度,cron,Cron,我写了一个cron作业: @Scheduled(cron="${process.virtual.account.start}") public void ecomProcessVirAccOrderPaymentsScheduler() { LOGGER.info("Start --->" + this.getClass().getCanonicalName() + ".ecomProcessVirAccOrderPaymentsScheduler() Method");

我写了一个cron作业:

@Scheduled(cron="${process.virtual.account.start}")
public void ecomProcessVirAccOrderPaymentsScheduler() {
    LOGGER.info("Start --->" + this.getClass().getCanonicalName() + ".ecomProcessVirAccOrderPaymentsScheduler() Method");
    schedulerJobHelper.ecomProcessVirAccOrderPaymentsScheduler();
    LOGGER.info("End --->" + this.getClass().getCanonicalName() + ".ecomProcessVirAccOrderPaymentsScheduler() Method");
}
我想从外部属性文件中获取与
@Scheduled
注释一起使用的cron属性。目前,我正在从应用程序范围内的属性文件获取它。
我能够获取该值,但无法将其与
@Schedule
注释一起使用。

您使用的是哪个版本的spring framework?如果小于3.0.1,则此选项无效

它已经在3.0.1中修复

所以,如果您使用的是Spring3.0.1或更高版本,那么在cron表达式中必须执行以下操作

  • 在applicationContext.xml中为PropertyPlaceHolderConfigure类创建一个条目,该类为
    <bean id="placeholderConfig"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:ApplicationProps.properties</value>
            </list>
        </property>
    </bean>
    
    注意:固定延迟和固定速率不能从占位符获取属性值,因为它们获取长值。Cron属性将参数作为字符串,这样您就可以使用占位符了

    @Configuration
    @PropertySource("/path/to/file")
    public class LoadPropertiesFile{
       //Other project configurations
    }
    

    更多信息,请参见这里的您可以直接从属性文件分配值,顺便说一句,我使用的是spring boot

    @Scheduled(cron = "${com.oracle.fusion.cron}")
    public void getInvoiceInterfaceHeader() {
    
    }
    

    它在弹簧靴中工作

    @Scheduled(cron="${cronExpression}")
    private void testSchedule()  {
        System.out.println("Helloooo");
    }
    
    application.properties
    中,我有如下属性:

    cronExpression=* * * ? * *
    

    对我来说,工作就是这样:

    "#{${cronExpression}}
    

    从Spring 3.2.2开始,您现在有:以及。
    "#{${cronExpression}}