首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春TaskScheduler豆未注入

春TaskScheduler豆未注入
EN

Stack Overflow用户
提问于 2015-03-13 05:04:45
回答 1查看 9.2K关注 0票数 5

我需要在创建会话时安排作业。所以我创建了我的HttpSessionListener:

代码语言:javascript
复制
@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 (取自它正在工作的一个示例):

代码语言:javascript
复制
@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工作)

EN

回答 1

Stack Overflow用户

发布于 2016-03-09 23:29:21

我在一个简单的Spring服务器上遇到了这个问题。我无法在上下文中找到taskScheduler bean或ScheduledTaskRegistrar bean。

为了解决这个问题,我更改了配置类以实现SchedulingConfigurer,在configureTasks方法中,我将任务调度程序设置为在配置中显式声明的任务调度器(作为bean)。下面是我的java配置:

代码语言:javascript
复制
@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的调度代码使用的任务调度器相同。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29025207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档