No qualifying bean of type 'org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer' available

Viewed 662

Today when I start my spring boot(v2.1.12.RELEASE) app with Java 8, shows error like this:

11:24:33.652 logback [main] WARN   o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'reportFactory' defined in class path resource [com/sportswin/soa/misc/config/mq/log/LogRabbitConfig.class]: Unsatisfied dependency expressed through method 'firstFactory' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

I have no idea what was happen. This is my LogRabbitConfig.java define:

package com.sportswin.soa.misc.config.mq.log;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Slf4j
public class LogRabbitConfig {

    @Bean(name = "reportConnectionFactory")
    public ConnectionFactory firstConnectionFactory(
            @Value("${rabbitmq.server.report.host}") String host,
            @Value("${rabbitmq.server.report.port}") int port,
            @Value("${rabbitmq.server.report.username}") String username,
            @Value("${rabbitmq.server.report.password}") String password,
            @Value("${rabbitmq.server.report.virtual.hostname}") String virtualHost
    ) {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);
        connectionFactory.setVirtualHost(virtualHost);
        connectionFactory.setPublisherConfirms(true);
        connectionFactory.setPublisherReturns(true);
        connectionFactory.setConnectionTimeout(2000);
        return connectionFactory;
    }

    @Bean(name = "reportRabbitTemplate")
    public RabbitTemplate firstRabbitTemplate(
            @Qualifier("reportConnectionFactory") ConnectionFactory connectionFactory
    ) {
        RabbitTemplate firstRabbitTemplate = new RabbitTemplate(connectionFactory);
        firstRabbitTemplate.setMandatory(true);
        firstRabbitTemplate.setReplyTimeout(2000);
        firstRabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
            if (ack) {
               } else {
          }
        });


        firstRabbitTemplate.setReturnCallback((message, replyCode, replyText,
                                               exchange, routingKey) -> {

        });
        return firstRabbitTemplate;
    }

    @Bean(name = "reportFactory")
    public SimpleRabbitListenerContainerFactory firstFactory(
            SimpleRabbitListenerContainerFactoryConfigurer configurer,
            @Qualifier("reportConnectionFactory") ConnectionFactory connectionFactory
    ) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();

        configurer.configure(factory, connectionFactory);
        return factory;
    }
}

and this is my AppStart.java:

  @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,
        RabbitAutoConfiguration.class,
        DruidDataSourceAutoConfigure.class})
@EnableDiscoveryClient
@EnableApolloConfig
@ImportResource(locations = {"classpath:mybatis/mybatis-config.xml"})
@ComponentScan(basePackages = {
        "com.sportswin.soa.job",
        "com.sportswin.soa.misc.config",
        "com.sportswin.soa.misc.spring.advice",
        "com.sportswin.soa.misc.interceptor.db",
        "com.sportswin.soa.user"
},excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,value = LogRabbitConfig.class)
})
@EnableScheduling
@EnableFeignClients(basePackages = {
        "com.sportswin.soa.analysis.controller"
}, basePackageClasses = {
        IAppController.class,
        IEnvelopRoomController.class,
        IHubReportProfitInnerController.class,
        ITenantOverviewController.class,
        IReconciliationAnalysisController.class,
        IRedEnvelopeInnerController.class,
        IHappyRainInnerController.class,
        IHappyCardInnerController.class,
        IHappyBombInnerController.class,
        ITickInnerController.class,
        ITenantInnerController.class,
        IReportWhoruAppWordController.class,
        IZhuolianUserListReportController.class
})
public class AppStarter {

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

what should I do to fix this problem? I have tried to remove the RabbitAutoConfiguration.class annotation but still did not fix this problem.

0 Answers
Related