java - @Schedule 启动两次
问题描述
这个程序每天凌晨 4 点开始,但每天计划开始两次,我已经检查了任何周期,但一切都井井有条。为什么总是启动两次?我该如何解决?
import javax.ejb.LocalBean;
import javax.ejb.Schedule;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
@Stateless
@LocalBean
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class RichiamiSync {
@Schedule (minute = "00", hour = "04")
public void main() {
try {
Logica.esegui();
}
catch (Exception e) {
Log.write("ERROR " + e);
Log.write("---------------------ERRORE FATALE IL PROGRAMMA E' STATO ARRESTATO-------------------------");
}
Ottimizza.sql();
Log.sendEmail();
}
}
最初这些方法是这样记录的:
@Singleton
@LocalBean
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
但是在另一个问题中,他们说无状态可以解决,现在问题总是一样的
解决方案
这是解决方案:
@Singleton
@LocalBean
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class ServerStartStop {
private ExecutorService es2 = Executors.newSingleThreadExecutor();
private Future<Void> operazioniAggiornamentoUI =null;
@Schedule(hour = "*" ,minute = "*",second = "*/10", persistent = false)
public void AggiornamentoUI(Timer timerInfo) {
if (operazioniAggiornamentoUI!=null)
if(!operazioniAggiornamentoUI.isDone())
return;
Callable<Void> callableObj = () -> { try {
GestoreAcquisizioneOrdiniUI.aggiornaUiAcquisizioneOrdini();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
};
operazioniAggiornamentoUI=es2.submit(callableObj);
}}
推荐阅读
- r - 如何在 R Studio 中将多个条形图转换为百分比条形图
- ios - 如何使用插值字符串作为 Firebase Cloud Functions 和 Typescript 的主题名称
- javascript - 如何将一个 div 的内容放在相邻的 div 之上?
- sql - 用于更新表但多列的 DB2 案例语句
- c# - 使用 C# 在 ASP.NET MVC 的索引视图中设置不同的 ID
- node.js - 如何删除firestore中字符串数组中的项目?
- javascript - 页面视图未在 SPA 中的 adobe 分析中的页面视图中触发
- c# - 如何将电子邮件的自定义处理延迟到 Outlook 发送延迟规则中设置的指定时间?
- angular - 保存正在运行的项目时,程序需要很长时间才能编译
- mysql - 将 dateTime 转换为 Time 并在 SQL 中放入 where 子句