Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未注入Spring任务调度程序Bean_Java_Spring_Task_Jobs_Schedule - Fatal编程技术网

Java 未注入Spring任务调度程序Bean

Java 未注入Spring任务调度程序Bean,java,spring,task,jobs,schedule,Java,Spring,Task,Jobs,Schedule,我需要在创建会话时安排作业。 因此,我创建了我的HttpSessionListener: @Component public class WebSessionListener implements HttpSessionListener { //@Autowired @Qualifier(value = "taskScheduler") private ThreadPoolTaskScheduler taskScheduler; @Autowired private PanierService

我需要在创建会话时安排作业。 因此,我创建了我的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没有被注入(没有这样的定义,或者有时它只是弹出一个NullPointerException)。

下面是我的TaskScheduler(取自它工作的示例):

我使用的是Spring Boot,我没有配置文件。它是基于Java的配置(如第二段代码所示)。
@自动连线和@Qualifier不适用于TaskScheduler(适用于PanierService)

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

为了解决这个问题,我更改了我的配置类以实现SchedulingConfigurer,并且在configureTasks方法中,我将任务调度器设置为在配置中显式声明的一个(作为bean)

@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的调度代码使用的任务调度器相同。

是否
@Autowired
不适用于
任务调度器
?是自动扫描的吗?共享spring配置文件。请仅使用
@Autowired
进行尝试。删除
@限定符
。能否共享您正在使用的xml配置?您在配置中定义了taskScheduler吗?我没有XML配置文件,我使用的是Spring Boot。这里有一个类似的例子:我已经实现了SchedulingConfigurer接口,我遇到了同样的问题。出于某种原因,只有在检索TaskScheduler实例(通过TaskScheduler()方法)并将其注入到我的组件中之后,才会调用configureTasks(ScheduledTaskRegistrar)方法@allenru谢谢你的片段!
@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
    }
}