powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Отправка электронного сообщения пользователю при наступлении срока
10 сообщений из 10, страница 1 из 1
Отправка электронного сообщения пользователю при наступлении срока
    #39125175
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Помогите советом или примером.

Есть web-приложение, которое запускается через TomCat. Пользователи используют web-приложение по мере необходимости. В web-приложение пользователи вносят некие мероприятия и устанавливают сроки исполнения их.
Мне нужно добавить в web-приложение функционал, который бы отправлял электронное сообщение на почтовый адрес пользователя при наступлении срока исполнения мероприятия.
Как отправить сообщение на почтовый адрес в сети более или мания описано. Но не отказался бы от рабочего примера.
Не понятно как контролировать момент отправки сообщения (например: проверять срок каждый пол дня), если приложения запускается по необходимости, а не крутится целый день. TomCat запущен всегда.

Не судите строго. Если что то не понятно, пишите, напишу подробней.
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39125207
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin_dзапускается по необходимости, а не крутится целый день.
либо
- новое приложение и оно крутится целый день для проверки "Наступило"
либо
- есть пакеты в БД делающие то же самое
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39125210
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin_d,

Ключевое слова Scheduler и Timer
Quartz Scheduler - то что хорошо интегрируется в JEE контейнер
cron - системный, не зависит от вашего сервера
Windows Task Scheduler - системный, не зависит от вашего сервера
ScheduledExecutorService - можно использовать, но возможны утечки при редеплое
java.util.Timer - тоже чреват косяками и вообще не удобен
EJB Timer Service - его нет в томкате, только отдельной либой ставить
Spring Scheduler - тоже всякое умеет, легко менять реализацию скедулера, нужен Spring

В идеале расписание же нужно персистить. Поэтому остаётся Quartz и системные скедулеры. И опять же и то и другое надо синхронизировать с записями в БД.

С другой стороны нафига нужна точность? Нафиг не нужна. Запускаем любой Job с переодичностью в N минут, делаем выборку мероприятий с фильтрацией по времени и по результату отправляем письма. С таким подходом можно любой из вышеописаных скедулеров прикрутить. Но в этом случае системные уже становятся совсем не удобными.

Выбирать вам.
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39125411
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczScheduledExecutorService - можно использовать, но возможны утечки при редеплое.
это решаемо
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39126406
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за информацию. Буду разбираться.
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39133549
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил использовать Quartz Scheduler. Посмотрел примеры, интегрировал в своё приложения планировщик.
Планировщик работает, только с ошибками при старте.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
15/12/21 16:45:31 log4j:ERROR Failed to excute sql
15/12/21 16:45:31 java.sql.SQLException: ORA-00917: missing comma
15/12/21 16:45:31 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:137)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:625)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:112)
15/12/21 16:45:31 	at oracle.jdbc.driver.T4CStatement.execute_for_rows(T4CStatement.java:560)
15/12/21 16:45:31 	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1153)
15/12/21 16:45:31 	at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1578)
15/12/21 16:45:31 	at org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:178)
15/12/21 16:45:31 	at org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:250)
15/12/21 16:45:31 	at org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:146)
15/12/21 16:45:31 	at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
15/12/21 16:45:31 	at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
15/12/21 16:45:31 	at org.apache.log4j.Category.callAppenders(Category.java:203)
15/12/21 16:45:31 	at org.apache.log4j.Category.forcedLog(Category.java:388)
15/12/21 16:45:31 	at org.apache.log4j.Category.log(Category.java:853)
15/12/21 16:45:31 	at org.apache.commons.logging.impl.Log4JLogger.info(Log4JLogger.java:152)
15/12/21 16:45:31 	at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1014)
15/12/21 16:45:31 	at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1152)
15/12/21 16:45:31 	at ebd.Session.AppListener.contextInitialized(AppListener.java:93)
15/12/21 16:45:31 	at com.evermind.server.http.HttpApplication.initDynamic(HttpApplication.java:1009)
15/12/21 16:45:31 	at com.evermind.server.http.HttpApplication.<init>(HttpApplication.java:549)
15/12/21 16:45:31 	at com.evermind.server.Application.getHttpApplication(Application.java:890)
15/12/21 16:45:31 	at com.evermind.server.http.HttpServer.getHttpApplication(HttpServer.java:707)
15/12/21 16:45:31 	at com.evermind.server.http.HttpSite.getApplication(HttpSite.java:438)
15/12/21 16:45:31 	at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:455)
15/12/21 16:45:31 	at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:285)
15/12/21 16:45:31 	at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:126)
15/12/21 16:45:31 	at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
15/12/21 16:45:31 	at java.lang.Thread.run(Thread.java:534)



У меня в приложении используется log4j который пишет в БД.
Получается Quartz Scheduler пытается с log4j работать? Как это отключить или настроить. Подскажите?
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39133565
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin_dПолучается Quartz Scheduler пытается с log4j работать?
может это Планировщик запускает приложение, а приложение работает с логгером? ))
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39133601
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Konstantin_dПолучается Quartz Scheduler пытается с log4j работать?
может это Планировщик запускает приложение, а приложение работает с логгером? ))по стектрейсу видно кто использует логгер
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39134928
Konstantin_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При выполнении конструкции
Код: java
1.
Scheduler scheduler = new StdSchedulerFactory().getScheduler();

появляются данные ошибки. И в логах (те что я через log4j пиши в БД) есть информация от Quartz Scheduler.

Если не использовать Quartz Scheduler, ошибок нет. Как сделать, чтобы Quartz Scheduler не писал через используемый в моём приложении log4j?
...
Рейтинг: 0 / 0
Отправка электронного сообщения пользователю при наступлении срока
    #39134946
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstantin_dКак сделать, чтобы Quartz Scheduler не писал через используемый в моём приложении log4j?
Можно просто Appender для него прописать отдельный и писать в файл, а не базу.
Странная вообще глобальная конфигурация, которая не работает.
Судя по стеку Quartz пишет в Commons Logging. Значит и его можно сконфигурять в нужный вам log.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Отправка электронного сообщения пользователю при наступлении срока
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]