Springboot не может инициализировать и внедрить сторонний компонент с помощью автопроводной аннотации - PullRequest
0 голосов
/ 10 мая 2018

У меня проблема с моим классом конфигурации.Фактическая проблема в соответствии с журналом:

> Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-05-10 10:47:47.622 ERROR 10728 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field queue in com.example.taskgenerator.Sender required a bean of type 'org.springframework.amqp.core.Queue' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.amqp.core.Queue' in your configuration.

Я использую Springboot с RabbitMQ службы очередей SDK впервые.

    package com.example.taskgenerator;
    import org.springframework.amqp.core.Queue;
    @Configuration
    public class TaskGeneratorConfig {
        @Bean
        public Queue queue() {
            return new Queue("simple-queue");
        }
    }

очередь является зависимостью для класса отправителя.

package com.example.taskgenerator;
import org.springframework.amqp.core.Queue;
@Component
public class Sender {
 @Autowired
    private Queue queue;
}

Пожалуйста, помогите.

Редактировать:

Добавление моего основного класса:

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;

@SpringBootApplication
//@EnableScheduling
//@EnableAsync
public class FileDumpReaderApplication {

    @Profile("usage_message")
    @Bean
    public CommandLineRunner usage() {
        return new CommandLineRunner() {

            @Override
            public void run(String... args) throws Exception {
                System.out.println("This app uses Spring profiles to control its behaviour.");
                System.out.println("Sample usage : java -jar readerapp.jar --spring.profiles.active=hello_world,sender");
            }

        };
    }

    @Profile("!usage_message")
    @Bean
    public CommandLineRunner usageTwo() {

        return new AppRunner();
    }

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

И класс бегуна командной строки:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ConfigurableApplicationContext;

public class AppRunner implements CommandLineRunner {


    @Autowired
    private ConfigurableApplicationContext context;

    @Autowired
    private Sender sender;

    @Override
    public void run(String... args) throws Exception {
            sender.send();

            //context.close();
    }

}

Примечание: все классы находятся в одном пакете.

1 Ответ

0 голосов
/ 10 мая 2018

Сканировать ваш пакет -
@SpringBootApplication (scanBasePackages = {"com.example.taskgenerator"}), а также дать аннотацию (@Component) в классе AppRunner.

Вам необходимо отсканировать васпакет, чтобы при запуске приложения они становились частью ApplicationContext.

...