Загрузить синтаксис Cron из базы данных в весеннее загрузочное приложение

Это мой класс запланированных задач

@Component
public class ScheduledTask {

    private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledTask.class);

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(cron = "${scheduling.job.cron}")
    public void reportCurrentTime() {
        LOGGER.info("The time is now {}", dateFormat.format(new Date()));
    }
}

В настоящее время я загружаю синтаксис cronjob из файла application.properties. Но я хочу загрузить синтаксис cron из базы данных SQL в начале загрузочного приложения Spring. Вот мой скрипт базы данных, который имеет синтаксис cronjob

CREATE TABLE tbl_configuration_details 
(
config_id int NOT NULL, 
schedule_time int NOT NULL,
schedule_time_format nvarchar(10) NOT NULL,
data_ttl int NOT NULL,
data_ttl_format nvarchar(10) NOT NULL,
cron_job_syntax nvarchar(255) NOT NULL,
created_timestamp datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_by int NOT NULL,
modified_timestamp datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified_by int NOT NULL,
PRIMARY KEY (config_id)
);

person Dharita Chokshi    schedule 06.01.2018    source источник


Ответы (1)


Шаг 1: Создайте bean-компонент для извлечения синтаксиса cron из базы данных

@Bean
public String getCronSyntax() {
    AppConfiguration appConfiguration = configurationService.getConfiguration();
    String cronSyntax = appConfiguration.getCronJobSyntax();
    LOGGER.info("cronsyntax: " + cronSyntax);
    return cronSyntax;
}

Шаг 2: Используйте #, чтобы получить синтаксис cron формы значения bean-компонента в аннотации расписания.

@Scheduled(cron = "#{getCronSyntax}")
private void cronSchedule() {
     LOGGER.info("The time is now {}", dateFormat.format(new Date()));
}
person Dharita Chokshi    schedule 23.01.2018
comment
Когда значения изменяются, выражение не обновляется до перезапуска приложения? - person Balasubramanian; 21.09.2018