Приложение состоит из нескольких полей, основные "message", "time", "email". Цель сделать подобие будильника. На данном этапе я пишу сообщение, время и email куда отправить, и у меня сразу улетает письмо с сообщением, при этом запись сохраняется. Подскажите, как обработать событие после сохранения, для того чтобы письмо улетало в соответствии с указанным временем. Может какая аннотация или метод. P.S. я нубас )
@Controller
public class NotificationController {
@Autowired
private CommandRepository commandRepository;
@Autowired
private NotificationService notificationService;
@GetMapping("/")
public String command(Map<String,Object> model)
{
Iterable<Command> commands = commandRepository.findAll();
model.put("commands", commands);
return "command";
}
@PostMapping
public String add(@RequestParam String name,
@RequestParam String message,
@RequestParam String time,
@RequestParam String email,
Map<String, Object> model)
{
Command command = new Command(name, message, time, email);
commandRepository.save(command);
notificationService.sendNotification(command);
Iterable<Command> commands = commandRepository.findAll();
model.put("commands", commands);
return "command";
}
}
Боюсь, что решение не очень простое. Подробнее можете почитать вот тут: Оповещения в определённое время Java.
Если вы используете Spring и решили не использовать Quartz, то рекомендую в качестве пула использовать ThreadPoolTaskExecutor.
@Configuration
@EnableAsync
public class AsyncConfiguration {
@Bean
public ThreadPoolTaskExecutor executor(){
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(5); //TODO configurable properties
threadPoolTaskExecutor.setMaxPoolSize(10); //TODO configurable properties
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
return threadPoolTaskExecutor;
}
}
И затем подцепить этот бин в компоненте.
Решил вопрос, просто добавив метод
@Scheduled(cron = CRON)
public void notifyMail()
{
long l = System.currentTimeMillis();
String curStringDate = new SimpleDateFormat("HH:mm").format(l);
if(timeList != null) {
for (int i = 0; i < timeList.size(); i++) {
if (curStringDate.equals(timeList.get(i))) {
javaMailSender.send(mailMessage);
timeList.remove(i);
System.out.println("done");
}
}
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости