Spring Boot Error org.springframework.beans.factory.UnsatisfiedDependencyException - PullRequest
0 голосов
/ 14 мая 2018

org.springframework.tax \ form \ DocStashElasticMigration \ Service \ Producer.class]: неудовлетворенная зависимость, выраженная через параметр конструктора 0;Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'java.util.concurrent.BlockingQueue': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматического подключения.Аннотации зависимостей: {} в org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:749) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframe.beans.factory.support.ConstructorResolver.autowireConstructor (ConstructorResolver.java:189) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.AbstractAableBactautowireConstructor (AbstractAutowireCapableBeanFactory.java:1201) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.ae1BeanBeanBeanBeanBean_Core_WeBC[spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:513-4.3-beans-5.33 -.17-springRELEASE.jar: 4.3.17.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:483) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.jb312) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:230) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:308) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:197) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:761) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.context.support.AbstractAationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:867) ~ [spring-context-4.3.17.RELEASE.jar: 4.3.17.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh (Abstract ~ Java):[spring-context-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.boot.SpringApplication.refresh (SpringApplication.java:693) [spring-boot-1.5.13.RELEASE.jar: 1.5.13.RELEASE] в org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:360) [spring-boot-1.5.13.RELEASE.jar: 1.5.13.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:303) [spring-boot-1.5.13.RELEASE.jar: 1.5.13.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1118) [spring-boot-1.5.13.RELEASE.jar: 1.5.13.RELEASE] at org.springframework.boot.SpringApplication.run (SpringApplication.java:1107) [spring-boot-1.5.13.RELEASE.jar: 1.5.13.RELEASE] вcom.adp.avs.tax.form.DocStashElasticMigration.DocStashElasticMigrationApplication.main (DocStashElasticMigrationApplication.java:29) [classes /: na]Вызывается: org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'java.util.concurrent.BlockingQueue': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи.Аннотации зависимостей: {} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound (DefaultListableBeanFactory.java:1493) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.raworking].beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1104) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factoryFacteef .Bef.resolDependency (DefaultListableBeanFactory.java:1066) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument (ConstructorResolver): ConstructorResolver.[spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] в org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:741) ~ [spring-beans-4.3.17.RELEASE.jar: 4.3.17.RELEASE] ... пропущено 18 общих кадров

Migration.java

@Service
public class Migration {

    @Autowired
    private TransportClient transportClient;

    @Autowired
    ClientDao clientDao;

    @Value("#{'${quarterly.form}'.split(',')}")
    private List<String> quarterlyForm;

    @Value("#{'${yearly.form}'.split(',')}")
    private List<String> yearlyForm;

    @Value("${threadCount:5}")
    private int threadCount;


    private final String oldIndex = "taxdocument";

    private final String newTaxformIndex = "";

    private final String newDocumentIndex = "";

    public static String type = "document";


    public void migratetoNewIndex(int year, int qtr) throws Exception{
        //Creating BlockingQueue of size 2000
        BlockingQueue<OutputDocument> queue = new ArrayBlockingQueue<OutputDocument>(2000);
        final Map<String,List<OrganizationUnit>> organizationUnitMap = clientDao.getAllOrg(String.valueOf(year).substring(2), String.valueOf(qtr));
        Producer producer = new Producer(queue,year,qtr);
        Thread producerThread = new Thread(producer);
        producerThread.start();
        List<Thread> consumerList = new ArrayList<Thread>();
        for(int i=0;i<threadCount;i++) {
            Consumer consumer = new Consumer(queue, organizationUnitMap);
            Thread T1 = new Thread(consumer);
            T1.start();
            consumerList.add(T1);
        }
        for (int i = 0; i < consumerList.size(); i++) {
            consumerList.get(i).join();
        }
        System.out.println("Producer and Consumer has been started");

    }

}

Producer.java

@Component
public class Producer implements Runnable {

    @Autowired
    private TransportClient transportClient;

    @Value("#{'${quarterly.form}'.split(',')}")
    private List<String> quarterlyForm;

    @Value("#{'${yearly.form}'.split(',')}")
    private List<String> yearlyForm;

    @Value("${threadCount:5}")
    private int threadCount;

    private final String oldIndex = "taxdocument";

    private final String type = "document";

    private int year;

    private int qtr;


    private BlockingQueue<OutputDocument> queue;

    public Producer(BlockingQueue<OutputDocument> q, int year,int qtr) {
        this.queue = q;
        this.year=year;
        this.qtr=qtr;

    }

    @Override
    public void run() {

        List subcatecory = new ArrayList();
        subcatecory.addAll(quarterlyForm);
        try {
            List<String> yearQtr = new ArrayList<String>();
            yearQtr.add(year + "/" + qtr);
            if (qtr == 4) {
                subcatecory.addAll(yearlyForm);
                yearQtr.add(String.valueOf(year));
            }
            SearchResponse scrollResp = transportClient.prepareSearch(oldIndex)
                    .setTypes(type)
                    .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)
                    .setScroll(new TimeValue(600000))
                    .setSize(1000)
                    .setQuery(boolQuery().must(QueryBuilders.termsQuery("subCategoryCode.codeValue", subcatecory))
                            .must(QueryBuilders.termsQuery("applicationData.yearQuarter", yearQtr)))
                    .get(); //max of 100 hits will be returned for each scroll

            if (scrollResp.getHits().getTotalHits() > 0) {
                OutputDocument outputDocument = null;
                Map<String, Object> responseMap = new HashMap<String, Object>();
                ObjectMapper mapper = new ObjectMapper();
                List<OutputDocument> documentList = new ArrayList<OutputDocument>();
                do {
                    for (SearchHit hit : scrollResp.getHits().getHits()) {
                        responseMap = hit.sourceAsMap();
                        responseMap.remove("storeKey");
                        outputDocument = mapper.convertValue(responseMap, OutputDocument.class);
                        queue.put(outputDocument);
                    }
                    scrollResp = transportClient.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
                } while (scrollResp.getHits().getHits().length != 0); // Zero hits mark the end of the scroll and the while loop.

                //exit message to child threads
                for(int i=0; i<threadCount; i++) {
                    OutputDocument exitMessage = new OutputDocument();
                    exitMessage.setItemID("exit");
                    queue.put(exitMessage);
                }
            }

        } catch (Exception e) {

        }

    }
}

Ответы [ 2 ]

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

Сообщение ясно: ни один компонент типа BlockingQueue не найден.

Вы аннотировали свой класс как

@Component
public class Producer implements Runnable

Следовательно, Spring попытается инициализировать одноэлементный компонент такого типа.

Как вы объявили конструктор:

public Producer(BlockingQueue<OutputDocument> q, int year,int qtr) {
    this.queue = q;
    this.year=year;
    this.qtr=qtr;

}

Поэтому Spring попытается использовать этот конструктор для инициализации компонента.

Но первый аргумент BlockingQueue<OutputDocument> q не найденотсюда и исключение.

Вам необходимо предоставить компонент этого типа:

@Bean
BlockingQueue<OutputDocument> createBlockingQueue() {
...
}

После того, как этот компонент предоставлен, Spring также будет жаловаться на year, qtr.Таким образом, вы должны предоставить эти бобы для этого. Редактировать

У вас серьезные проблемы с управлением зависимостями.

Если вы объявите свой Producer как @Component, вы должны добавить его в класс Migrationвместо того, чтобы создавать его вручную.

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

См. Общедоступный источник (BlockingQueue q, int year, int qtr) Вы не объявили фабричный экземпляр, квалифицирующий экземпляр типа 'java.util.concurrent.BlockingQueue' BlockingQueue Вы можете добавить фабричный метод или фабричный бин

@Bean
public BlockingQueue<OutputDocument> createBlockingQueue() {

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