Spring Boot уведомление по времени

204
01 марта 2019, 04:10

Приложение состоит из нескольких полей, основные "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";
    }
}
Answer 1

Боюсь, что решение не очень простое. Подробнее можете почитать вот тут: Оповещения в определённое время 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;
    }

}

И затем подцепить этот бин в компоненте.

Answer 2

Решил вопрос, просто добавив метод

@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");
                }
            }
        }
    }
READ ALSO
Как реализовать

Как реализовать

Помогите , немогу реализовать Json кодМне нужно взять данные но немогу понять как

208
Окно закрытия приложения

Окно закрытия приложения

Подскажите пожалуйста, как правильно будет реализоватьУ меня имеется окно закрытия приложения (при нажатии на кнопку назад из главного экрана...

169
Какой символ использует DecimalFormat вместо пробела?

Какой символ использует DecimalFormat вместо пробела?

Пытаюсь убрать пробелы из строки, но ничего не происходит

300
java.sql.sqlexception access denied for user &#39;root&#39;@&#39;192.168.0.3&#39;

java.sql.sqlexception access denied for user 'root'@'192.168.0.3'

Пытаюсь подключиться к базе запущенной из XAMPP с другого компьютера по локалкеАдрес сервера 192

176