I am running a web application scheduler of spring(cron) for sending notification mail, when running on local server its running fine but on production mode its sending multiple mails.
<bean id = "EmailNotificationScheduledTask" class = "com.prism.utils.EmailNotificationTask" />
<task:scheduled-tasks scheduler = "scheduler">
<task:scheduled ref = "EmailNotificationScheduledTask" method = "run" cron = "0 0 10 * * MON"/>
</task:scheduled-tasks>
<task:scheduler id = "scheduler" pool-size = "1"/>
public class EmailNotificationTask extends TimerTask{
@Override
public void run() {
synchronized (this) {
sendPropertyNotificationEmail();
}
//}
}
@SuppressWarnings("unchecked")
public void sendPropertyNotificationEmail(){
try{
//Mail sending logic
}
} catch (DAOException ee) {
_logger.error("Error while sending notification messages", ee);
}
}
}
@hisener вызывается не просто метод sendPropertyNotificationEmail, который содержит функцию отправки почты.
Ожидается ли, что sendPropertyNotificationEmail () будет отправлять одно письмо за один вызов? Когда вы говорите «отправка нескольких писем», вы имеете в виду, что каким-то образом sendPropertyNotificationEmail () вызывается в нескольких потоках? Пожалуйста, поясните подробнее проблему.
@Rahul, да, я думаю, он запускается в нескольких потоках. Да, функция реализована для отправки одного письма каждый понедельник в 10 часов утра, при локальном тестировании он работает нормально, отправляется только одно письмо, но при развертывании в производственном режиме отправляется несколько писем.
@Rahul, hisener, пожалуйста, найдите исходный код в вопросе, который я отредактировал снова. Собственно в исходном коде метод run вызывается.
Я думаю, вам не нужно переопределять метод запуска. Spring справляется с этим. Пожалуйста, обратитесь к spring.io/guides/gs/scheduling-tasks
@hisener в порядке, но все равно ведет себя так же.
@hisener, а также как вы можете сказать, что метод run создает проблему? пожалуйста, объясни.
Думал как-то запустить метод, как и sendPropertyNotificationEmail. Я не совсем понимаю, в чем проблема. Мне нужно попробовать, но я сейчас недоступен, извините.
В производстве работает более одного сервера?




Проверьте, как настроены экземпляры в вашем производственном контейнере. Отключите автоматическое масштабирование, если оно установлено. В пакетной программе никогда не должно быть запущено более одного экземпляра в любой момент.
Есть ли в вашем коде аннотации?