我需要定期运行任务,所以我查找了@Scheduled
注释。
我使用了以下代码:
public class MyTask {
@Scheduled(fixedRate = 2000L)
public void testScheduling() {
System.out.println("Run Me ~ " + System.currentTimeMillis());
}
}
我得到以下输出:
Run Me ~ 1419859820512
Run Me ~ 1419859821671
Run Me ~ 1419859822512
Run Me ~ 1419859823670
Run Me ~ 1419859824512
Run Me ~ 1419859825671
Run Me ~ 1419859826513
Run Me ~ 1419859827670
Run Me ~ 1419859828513
Run Me ~ 1419859829671
Run Me ~ 1419859830513
我不明白为什么大约是 1100 毫秒和 900 毫秒而不是 2000 毫秒。除了将它乘以 2 之外,我还能做些什么来解决这个问题?这是奇怪的不可预测的。
编辑:评论者是对的:
System.out.println("Run Me (" + this.hashCode() + ") ~ " + System.currentTimeMillis());
给我
Run Me (1315556362) ~ 1419863164220
Run Me (410352054) ~ 1419863164540
Run Me (1315556362) ~ 1419863166221
Run Me (410352054) ~ 1419863166540
所以我必须弄清楚为什么有两个bean实例。
编辑:出于某种原因,有两个 web 应用程序初始化程序,一个是 webappinitializer,另一个是安全初始化程序
public class BackendWebAppInitializer implements WebApplicationInitializer {
....
}
和
public class SecurityWebApplicationInitializer extends
AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(WebSecurityConfig.class);
}
}
出于某种原因,作为这两个初始化程序的结果,启动了两个实例。不知道该怎么办。