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

时间:2014-06-19 11:55:52

标签: cron

我写了一份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注释一起使用。

5 个答案:

答案 0 :(得分:15)

您使用的是哪个版本的spring框架?如果它小于3.0.1,则不起作用。

Bug Report here in Spring 3.0.0并已在3.0.1中修复。

因此,如果您使用的是Spring 3.0.1或更高版本,那么请遵循cron表达式中必须执行的操作       

  • 在applicationContext.xml中为PropertyPlaceHolderConfigurer类创建一个

    的条目
    <bean id="placeholderConfig"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:ApplicationProps.properties</value>
            </list>
        </property>
    </bean>
    

     之后使用@Scheduled方法,如

    @Scheduled(cron="${instructionSchedularTime}")
    public void load(){
    }
    

    注意:fixedDelay和fixedRate不能从palceholder获取属性值,因为它们需要很长的值。 Cron属性将参数作为String,因此您可以使用占位符。

  • 答案 1 :(得分:1)

    尝试类似

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

    有关更多信息,请在click这里

    答案 2 :(得分:1)

    它在Spring Boot中工作。

    @Scheduled(cron="${cronExpression}")
    private void testSchedule()  {
        System.out.println("Helloooo");
    }
    

    在application.properties中,我具有如下所示的属性

    cronExpression = * * *吗? * *

    答案 3 :(得分:0)

    您可以直接从属性文件分配值,我正在使用Spring Boot BTW

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

    答案 4 :(得分:0)

    对我来说是这样的:

    final EmojiPopup emojiPopup = EmojiPopup.Builder.fromRootView(rootView).build(emojiEditText);
    emojiPopup.toggle(); // Toggles visibility of the Popup.
    emojiPopup.dismiss(); // Dismisses the Popup.
    emojiPopup.isShowing(); // Returns true when Popup is showing.