0

我需要定期运行任务,所以我查找了@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);
    }
}

出于某种原因,作为这两个初始化程序的结果,启动了两个实例。不知道该怎么办。

4

1 回答 1

0

我似乎找到了双重实例化问题的原因。如下。

我们有以下两个主要配置:

public class SecurityWebApplicationInitializer extends
        AbstractSecurityWebApplicationInitializer {

    public SecurityWebApplicationInitializer() {
        super(WebSecurityConfig.class);
    }
}

@Configuration
@ComponentScan({ ... })
@EnableWebMvc
@ImportResource({ "classpath:spring-config.xml" })
public class ApplicationConfig {

}

但显然,此设置两次实例化应用程序上下文。解决方案如下:

public class SecurityWebApplicationInitializer extends
        AbstractSecurityWebApplicationInitializer {

    public SecurityWebApplicationInitializer() {
        //super(WebSecurityConfig.class);
    }
}

@Configuration
@ComponentScan({ ... })
@EnableWebMvc
@ImportResource({ "classpath:spring-config.xml" })
@Import({WebSecurityConfig.class})
public class ApplicationConfig {

}
于 2015-05-12T12:58:16.067 回答