Нет подходящего компонента типа ThreadPoolTaskExecutor - PullRequest
1 голос
/ 17 февраля 2020

Я использую Spring Boot 2.2.4 и пытаюсь создать пользовательский Executor

Ниже приведены соответствующие классы

@Configuration
@ManagedResource
public class ExecutorConfig {
    @Bean(name = "detailsScraperExecutor")
    public Executor getDetailsAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setQueueCapacity(1000000);
        executor.setThreadNamePrefix("detailsScraperExecutor-");
        executor.initialize();
        return executor;
    }
}

и следующий класс, который пытается его использовать .

@Component
@Profile("!test")
public class DetailsScraper {
    private static final Logger logger = LoggerFactory.getLogger(DetailsScraper.class);

    @Autowired
    @Qualifier("detailsScraperExecutor")
    private ThreadPoolTaskExecutor detailsScraperExecutor;
}

Когда я запускаю приложение, я получаю следующую ошибку

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания бина с именем detailsScraper: неудовлетворенная зависимость выражается через поле detailsScraperExecutor; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true), @ org.springframework.beans.factory.annotation.Qualifier (value = "detailsScraperExecutor")}

my application.properties

spring.jmx.enabled=false

spring.datasource.url=jdbc:postgresql://example.com:5432/example
spring.datasource.username=example
spring.datasource.password=password

spring.jpa.open-in-view=false

logging.level.com.gargoylesoftware.htmlunit=ERROR

spring.datasource.hikari.maximumPoolSize = 30



app.properties.parseaddress.endpoint=http://example.com

Даже если я назвал его detailsScraperExecutor Spring не может его найти? Почему это?

1 Ответ

1 голос
/ 17 февраля 2020

Вам необходимо внедрить тот же тип класса, который объявлен в конфигурации, но не класс более высокого уровня. Но вы можете использовать более низкий уровень.

 @Autowired
 private Executor detailsScraperExecutor;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...