Ответ 1
вы должны использовать quartz-scheduler
и send mails at different time and send only once.
- Поместите это как бизнес-логику в свой код. См. Интеграцию с загрузкой весны -quartz https://github.com/davidkiss/spring-boot-quartz-demo
В настоящее время я разрабатываю приложение на основе Spring-Boot.
Я знаю, что аннотация, подобная @Scheduled, может планировать задачи. Поскольку пользователи в моем приложении хотят отправлять письма в разное время и отправлять их только один раз.
Я уже прочитал задание Spring Spring schedinging - запускается только один раз, но это странно всегда "новый" localExecutor в приложении Spring.
Таким образом, как только пользователь планирует рассылать электронное письмо, мне нужно "новое" localExecutor для его задачи.
Итак, есть ли лучшие способы?
вы должны использовать quartz-scheduler
и send mails at different time and send only once.
- Поместите это как бизнес-логику в свой код. См. Интеграцию с загрузкой весны -quartz https://github.com/davidkiss/spring-boot-quartz-demo
Самый простой способ запланировать задачи весной - создать метод, аннотированный @Scheduled
в управляемом весной компоненте. Он также требовал @EnableScheduling
в любых классах @Configuration
.
Вы можете использовать crontab внутри @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);
}
Вы можете использовать Quartz Scheduler.
Quartz - это многофункциональная библиотека с открытым исходным кодом, которая может быть интегрирована практически в любое приложение Java - от самого маленького автономного приложения до самой большой системы электронной коммерции. Кварц можно использовать для создания простых или сложных графиков выполнения десятков, сотен или даже десятков тысяч заданий; задания, задачи которых определены как стандартные компоненты Java, которые могут выполнять практически все, что вы можете их запрограммировать. Кварцевый планировщик включает в себя множество функций корпоративного класса, таких как поддержка транзакций JTA и кластеризация.
Вы можете найти несколько блогов, иллюстрирующих, как использовать кварц в весенней загрузке, включая определение bean-компонентов JobDetail, Trigger, фабрики и т.д., Которые немного перегружены и громоздки.
Вы можете попробовать https://github.com/mejariamol/quartz-easy. Эта библиотека упрощает интеграцию кварцевого планировщика в среду весенней загрузки. Я придумал это при настройке кварцевого планировщика в одном из проектов на работе.
import com.indusnode.quartz.annotation.Scheduled;
...
@Scheduled(interval="5", intervalType=Scheduled.IntervalType.SEC)
class TestJob implements Job {
//...
}
qe.base-package
качестве имени базового пакета проекта, который будет содержать все ваши реализации заданий. Также добавьте com.indusnode
в качестве значения для basePackage при сканировании компонентов. Чтобы использовать эту библиотеку, pom.xml
quartz-easy
в quartz-easy
артефакт в разделе зависимостей вашего pom.xml
<dependency>
<groupId>com.indusnode</groupId>
<artifactId>quartz-easy</artifactId>
<version>1.0.0</version>
</dependency>
Для получения дополнительной информации, пожалуйста, обратитесь https://search.maven.org/artifact/com.indusnode/quartz-easy/1.0.0/jar
При весенней загрузке мы можем реализовать планировщик несколькими способами, но здесь мы используем аннотацию для реализации планировщика. При весенней загрузке мы можем реализовать планировщик, используя аннотацию @Scheduled. Аннотация @Scheduled внутренне использует интерфейс TaskScheduler для планирования задачи. Чтобы включить аннотацию @Scheduled, мы должны использовать аннотацию @EnableScheduling в файле конфигурации.
Посетите https://developervillage.blogspot.com/2019/05/schedulertask-executor-in-spring-boot.html для получения полной информации со всей конфигурацией.