我需要在创建会话时安排作业。所以我创建了我的HttpSessionListener:
@Component
public class WebSessionListener implements HttpSessionListener {
//@Autowired
@Qualifier(value = "taskScheduler")
private ThreadPoolTaskScheduler taskScheduler;
@Autowired
private PanierService panierService;
//Notification that a session was created.
@Override
public void sessionCreated(HttpSessionEvent httpSessionCreatedEvent) {
Runnable viderPanier20mnJob = PanierJobs.getViderPanier20mnJob(httpSessionCreatedEvent.getSession());
taskScheduler.schedule(viderPanier20mnJob, PanierJobs.getNextDateTime());
System.out.println("Session Created Called! -----------------------");
},但这里我的大问题是TaskScheduler bean没有被注入(NoSuchBeanDefinition或者有时只是弹出一个NullPointerException)。
下面是我的TaskScheduler (取自它正在工作的一个示例):
@Configuration
@EnableScheduling
@EnableAsync
public class JobSchedulingConfig{
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
return executor;
}
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
return scheduler;
}
}我使用Spring,我没有配置文件。这是基于Java的配置(如第二个代码片段所示)。@自动发条和@限定符不适用于TaskScheduler (为PanierService工作)
发布于 2016-03-09 23:29:21
我在一个简单的Spring服务器上遇到了这个问题。我无法在上下文中找到taskScheduler bean或ScheduledTaskRegistrar bean。
为了解决这个问题,我更改了配置类以实现SchedulingConfigurer,在configureTasks方法中,我将任务调度程序设置为在配置中显式声明的任务调度器(作为bean)。下面是我的java配置:
@Configuration
@EnableScheduling
@EnableAsync
public class BeansConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setTaskScheduler(taskScheduler());
}
@Bean
public TaskScheduler taskScheduler() {
return new ConcurrentTaskScheduler(); //single threaded by default
}
}这有一个不幸的副作用,就是我声明了任务调度程序,而不是让Spring在它认为合适的情况下默认它。我选择使用与Spring4.2.4使用的相同的实现(并发任务调度器中的单线程执行器)。
通过实现SchedulingConfigurer接口,我确保了我创建的任务调度器与Spring的调度代码使用的任务调度器相同。
https://stackoverflow.com/questions/29025207
复制相似问题