[英]Spring @Scheduled fixedRate giving odd results?
我需要定期運行任務,因此我查找了@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);
}
}
由於某些原因,由於這兩個初始化程序的緣故,啟動了兩個實例。 不知道該怎么辦。
我似乎已經找到了雙重實例化問題的原因。 如下。
我們有以下兩個主要配置:
public class SecurityWebApplicationInitializer extends
AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(WebSecurityConfig.class);
}
}
和
@Configuration
@ComponentScan({ ... })
@EnableWebMvc
@ImportResource({ "classpath:spring-config.xml" })
public class ApplicationConfig {
}
但是顯然,此設置兩次實例化了Application Context。 解決方案如下:
public class SecurityWebApplicationInitializer extends
AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
//super(WebSecurityConfig.class);
}
}
和
@Configuration
@ComponentScan({ ... })
@EnableWebMvc
@ImportResource({ "classpath:spring-config.xml" })
@Import({WebSecurityConfig.class})
public class ApplicationConfig {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.