简体   繁体   中英

"A Task Scheduler" is Required when using Spring Integration with MQTT

I have a project where I am using Spring Integration where I am connecting to a broker and then publish-subscribe the messages issued to the broker.

When using @EnableAutoConfiguration and @ComponentScan and @Configuration the application runs fine that is using @SpringBootApplication as a whole. But I don't want to use @EnableAutoConfiguration, this is just a POC project to be integrated into a bigger chunk project. Where, if @EnableAutoConfiguration is used may cause issues for other components which are not needed.

So, how can I resolve this issue?

This is just an excerpt from the project and when done should run normally:


@Configuration
@ComponentScan
public class TestMQTTApp {

    public static void main(String[] args) {
        SpringApplication.run(TestMQTTApp.class,args);
    }

    @Bean
    public MessageChannel mqttInputChannel() {
        return new DirectChannel();
    }

    @Bean
    public MqttPahoMessageDrivenChannelAdapter inbound() {
        String clientId = "uuid-" + UUID.randomUUID().toString();
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter("tcp://localhost:1883", clientId, "topic1"   );
        adapter.setCompletionTimeout(5000);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(1);
        adapter.setOutputChannel(mqttInputChannel());
        return adapter;
    }
    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory factory =
                new TomcatEmbeddedServletContainerFactory();
        return factory;
    }
}

Error is as follows:

org.springframework.context.ApplicationContextException: Failed to start bean 'inbound'; nested exception is java.lang.IllegalStateException: A 'taskScheduler' is required
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176) ~[spring-context-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:50) ~[spring-context-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:350) ~[spring-context-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149) ~[spring-context-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112) ~[spring-context-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:880) ~[spring-context-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE]
    at com.harman.TestSpring.main(TestSpring.java:23) [classes/:na]
Caused by: java.lang.IllegalStateException: A 'taskScheduler' is required
    at org.springframework.util.Assert.state(Assert.java:70) ~[spring-core-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter.doStart(MqttPahoMessageDrivenChannelAdapter.java:145) ~[spring-integration-mqtt-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.integration.endpoint.AbstractEndpoint.start(AbstractEndpoint.java:117) ~[spring-integration-core-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) ~[spring-context-4.3.20.RELEASE.jar:4.3.20.RELEASE]
    ... 14 common frames omitted

I am having trouble scanning the packages for the task scheduler although nowhere in the code have I mentioned this.

Additional Information for POM:

  • Spring Boot - 1.5.1.RELEASE
  • Spring Framework Version - 4.3.20.RELEASE
  • Spring Integration - 4.3.20.RELEASE

You are missing @EnableIntegration . That one adds a broader Spring Integration infrastructure, included a required TaskScheduler . See docs foer more info: https://docs.spring.io/spring-integration/docs/current/reference/html/overview.html#configuration-enable-integration

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM