Планирование заданий с использованием выражения 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");
}
Я хочу, чтобы атрибут cron, используемый с аннотацией @Scheduled
, был заполнен из внешнего файла свойств. В настоящее время я извлекаю его из файла свойств внутри области приложения.
Я могу получить значение, но не могу использовать его с аннотацией @Schedule
.
Ответы
Ответ 1
Какую версию Spring Framework вы используете? Это не будет работать, если оно меньше, чем 3.0.1.
Сообщение об ошибке здесь 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 не могут получить значение свойства из держателя поля, поскольку они принимают длинное значение. Атрибут Cron принимает аргумент как String, поэтому вы можете использовать для этого заполнитель.
Ответ 2
это работает в весеннем ботинке.
@Scheduled(cron="${cronExpression}")
private void testSchedule() {
System.out.println("Helloooo");
}
в application.properties
меня есть такое свойство, как показано ниже:
cronExpression=* * * ? * *
Ответ 3
Попробуйте что-то вроде
@Configuration
@PropertySource("/path/to/file")
public class LoadPropertiesFile{
//Other project configurations
}
Для получения дополнительной информации нажмите здесь
Ответ 4
Вы можете присвоить значение непосредственно из файла свойств, я использую, кстати, весеннюю загрузку
@Scheduled(cron = "${com.oracle.fusion.cron}")
public void getInvoiceInterfaceHeader() {
}