在Windows和Linux上安装的Glassfish上运行的同一应用程序。在Windows上,没有问题。在Linux上,每隔几天就会停止触发所有计时器。
添加属性:
reschedule-failed-timer=true
没有解决问题。
我认为,这可能与转换回滚或系统异常有关,所以我创建了简单的测试计时器:
@Startup
@Singleton
@LocalBean
public class AliveTimer {
final static Logger log = Logger.getLogger( AliveTimer.class );
@Resource private TimerService ts;
@PostConstruct
private void atStartup() {
TimerConfig config = new TimerConfig();
config.setPersistent( false );
ScheduleExpression schedule = new ScheduleExpression();
schedule.second( "0" );
schedule.minute( "30" );
schedule.hour( "*/8" );
ts.createCalendarTimer( schedule, config );
}
@Timeout
public void execute( Timer timer ) {
log.info( "Timers alive..." );
}
}
甚至几天后就停止触发,只有应用程序重新部署或容器重启会有所帮助。
发生这种情况时,请拨打以下网址
http://localhost:8080/ejb-timer-service-app/timer
返回正常输出
Welcome to Timer Application
There are 0 active persistent timers on this container
There are 258 active non-persistent timers on this container
日志中也没有发现重要的东西。
有人知道是什么原因吗?