2016-01-28 2 views
14

В настоящее время я разрабатываю приложение на основе Spring-Boot.Каков наилучший способ запланировать задачу в приложении загрузки весной

Я знаю, что аннотация, подобная @Scheduled, может планировать задачи. Поскольку пользователи в моем приложении хотят отправлять письма в разное время и отправлять их только один раз.

Я уже прочитал сообщение Spring scheduling task - run only once, , но это странно всегда «новый» локальный исполнитель в приложении на основе Spring.

Таким образом, после того, как пользователь расписал рассылку электронной почты, мне нужно «новое» localExecutor выполнить его задачу.

Итак, есть ли лучшие способы?

ответ

5

вы должны использовать quartz-scheduler и send mails at different time and send only once. - поставить это в качестве бизнес-логики в вашем коде. Пожалуйста, обратитесь к весенне-загрузочной интеграции -quartz https://github.com/davidkiss/spring-boot-quartz-demo

12

Самый простой способ запланировать задачи весной - создать метод, аннотированный @Scheduled весенним управляемым bean-компонентом. Он также требовал @EnableScheduling в любых классах @Configuration.

Spring tutorial

+0

да, я уже использую этот вид аннотаций для задачи планирования. Но в моем состоянии пользователь только хочет отправить свое письмо один раз в определенное время. Поэтому, если я использую аннотацию @Schedule, мне нужно «опросить» проверку, следует ли отправлять почту каждые несколько минут или часов ..... – Exia

+0

Надеюсь [это] (http://stackoverflow.com/questions/17402112/ correct-way-to-persist-quartz-triggers-in-database) может быть вам полезен –

+0

Thx. Тогда я попробую Кварц .. – Exia

8

Вы можете использовать кронтаб внутри @Scheduled

private AtomicInteger counter = new AtomicInteger(0); 

@Scheduled(cron = "*/2 * * * * *") 
public void cronJob() { 
    int jobId = counter.incrementAndGet(); 
    System.out.println("Job " + new Date() + ", jobId: " + jobId); 
} 
Смежные вопросы