как исправить ошибку "ошибка создания бина с именем ...." - PullRequest
0 голосов
/ 18 февраля 2020

при запуске приложения отображается следующая ошибка:

org.springframework.beans.factory.BeanCreationException: Ошибка при создании компонента с именем 'pamdaBatchConfigurer': сбой вызова метода init; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'getJobRepository', определенным в com.orange.pamda.config.PamdaBatchConfigurer: создание экземпляра компонента с помощью метода фабрики не выполнено; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.batch.core.repository.JobRepository]: круговая ссылка, включающая в себя содержащий bean-компонент «pamdaBatchConfigurer» - рассмотрите возможность объявления метода фабрики как статического c для независимости содержащий его экземпляр. Фабричный метод getJobRepository вызвал исключение; Вложенное исключение: java .lang.IllegalArgumentException: DatabaseType не найден для имени продукта: [MariaDB] в org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialSource_Exchange.Exchange.Exchange. .factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization (AbstractAutowireCapableBeanFactory java:. 409) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory java:. 1620) в org.springframework.beans.factory.support (. AbstractAutowireCapableBeanFactory java: 555) .AbstractAutowireCapableBeanFactory.doCreateBean в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory java:. 483) в org.springframework.beans.factory.support.AbstractBeanFactory $ 1. getObject (AbstractBeanFactory. java: 306) в org.springframewo rk.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry. java: 230) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory. 302. factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory. java: 197) в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory. *. finishBeanFactoryInitialization (AbstractApplicationContext. java: 867) по адресу org.springframework.context.support.AbstractApplicationContext.refre sh (AbstractApplicationContext. java: 543) по адресу org.springframework.wextAe.contete.text 1026 *: 443) в org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader. java: 325) в org.springframework.web.context.ContextLoaderListener.contextInitializ ed (ContextLoaderListener. java: 107) в орг. apache .catalina.core.StandardContext.listenerStart (StandardContext. java: 4685) в орг. apache .catalina.core.StandardContext.startInternal (StandardContext. java: 5146) в орг. apache .catalina.util.LifecycleBase.start (LifecycleBase. java: 183) в орг. apache .catalina.core.ContainerBase $ StartChild.call (ContainerBase. * 1036) *: 1384) в орг. apache .catalina.core.ContainerBase $ StartChild.call (ContainerBase. java: 1374) в java .util.concurrent.FutureTask.run (FutureTask. java: 266) в орг. apache .tomcat.util.threads.InlineExecutorService.execute (InlineExecutorService. java: 75) в java .util.concurrent.AbstractExecutorService.submit (AbstractExecutorService. java: 134) в орг. 1045 * .catalina.core.ContainerBase.startInternal (ContainerBase. java: 909) в орг. apache .catalina.core.StandardHost.startInternal (StandardHost. java: 841) в орг. apache .catalina .util.LifecycleBase.start (LifecycleBase. java: 183) на орг. apache .catalina.core. ContainerBase $ StartChild.call (ContainerBase. java: 1384) в орг. apache .catalina.core.ContainerBase $ StartChild.call (ContainerBase. java: 1374) в java .util.concurrent.FutureTask. выполнить (FutureTask. java: 266) в орг. apache .tomcat.util.threads.InlineExecutorService.execute (InlineExecutorService. java: 75) в java .util.concurrent.AbstractExecutorService.submit (AbstractExecutorS). java: 134) в орг. apache .catalina.core.ContainerBase.startInternal (ContainerBase. java: 909) в орг. apache .catalina.core.StandardEngine.startInternal (StandardEngine. java: 262) в орг. apache .catalina.util.LifecycleBase.start (LifecycleBase. java: 183) в орг. apache .catalina.core.StandardService.startInternal (StandardService. java: 421) в орг. . apache .catalina.util.LifecycleBase.start (LifecycleBase. java: 183) в орг. apache .catalina.core.StandardServer.startInternal (StandardServer. java: 930) в орг. apache .catalina.util.LifecycleBase.start (LifecycleBase. java: 183) в орг. apache .catalina.startup.Catalina.start ( Каталина. java: 633) в sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. java: 62) в sun.reflectОбновление *: 43) в java .lang.reflect.Mehod.invoke (Метод. java: 498) в орг. apache .catalina.startup. Bootstrap .start (Bootstrap. java: 343) at org. apache .catalina.startup. Bootstrap .main (Bootstrap. java: 474)

, вот мой файл "pamdabatchconfigurer. java":

    package com.orange.pamda.config;

import java.util.Date;
import java.util.Set;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;

import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.configuration.annotation.BatchConfigurer;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.batch.core.explore.support.JobExplorerFactoryBean;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.support.SimpleJobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.Transactional;

import com.orange.pamda.config.batch.listener.SendFileAfterExportListener;
import com.orange.pamda.worker.config.CatalogueExporterJobConfiguration;
import com.orange.pamda.worker.config.CatalogueImporterJobConfiguration;
import com.orange.pamda.worker.config.CommonJobConfiguration;
import com.orange.pamda.worker.config.DataExporterJobConfiguration;
import com.orange.pamda.worker.config.HierarchyValidatorJobConfiguration;
import com.orange.pamda.worker.config.JobBuilderFactory;
import com.orange.pamda.worker.config.KoalaExporterJobConfiguration;
import com.orange.pamda.worker.config.MappingExporterJobConfiguration;
import com.orange.pamda.worker.config.MappingImporterJobConfiguration;
import com.orange.pamda.worker.config.OrphanExporterJobConfiguration;
import com.orange.pamda.worker.config.ReleaseJobConfiguration;
import com.orange.pamda.worker.config.SummaryExporterJobConfiguration;

@Configuration
@EnableBatchProcessing(modular = true)
@Import({ CommonJobConfiguration.class, CatalogueExporterJobConfiguration.class,
        CatalogueImporterJobConfiguration.class, DataExporterJobConfiguration.class,
        HierarchyValidatorJobConfiguration.class, KoalaExporterJobConfiguration.class,
        MappingExporterJobConfiguration.class, MappingImporterJobConfiguration.class,
        OrphanExporterJobConfiguration.class, ReleaseJobConfiguration.class, SummaryExporterJobConfiguration.class })
public class PamdaBatchConfigurer implements BatchConfigurer {

    @Autowired
    private PlatformTransactionManager transactionManager;

    @Autowired
    private DataSource dataSource;

    @Override
    @Bean
    public JobRepository getJobRepository() throws Exception {
        JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean();
        jobRepositoryFactoryBean.setDataSource(dataSource);
        jobRepositoryFactoryBean.setTransactionManager(transactionManager);
        jobRepositoryFactoryBean.setIsolationLevelForCreate("ISOLATION_DEFAULT");
        jobRepositoryFactoryBean.afterPropertiesSet();
        return jobRepositoryFactoryBean.getObject();
    }

    @Override
    public PlatformTransactionManager getTransactionManager() throws Exception {
        return transactionManager;
    }

    @Override
    @Bean
    public JobLauncher getJobLauncher() throws Exception {
        SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
        jobLauncher.setJobRepository(getJobRepository());
        // jobLauncher.setTaskExecutor(getTaskExecutor());
        jobLauncher.afterPropertiesSet();
        return jobLauncher;
    }

    @Override
    @Bean
    public JobExplorer getJobExplorer() throws Exception {
        JobExplorerFactoryBean jobExplorerFactoryBean = new JobExplorerFactoryBean();
        jobExplorerFactoryBean.setDataSource(dataSource);
        jobExplorerFactoryBean.afterPropertiesSet();
        return jobExplorerFactoryBean.getObject();
    }

    // @Bean
    // public TaskExecutor getTaskExecutor() {
    // SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new
    // SimpleAsyncTaskExecutor();
    // simpleAsyncTaskExecutor.setConcurrencyLimit(1000); // no throttle
    // return simpleAsyncTaskExecutor;
    // }

    @Bean
    public JobBuilderFactory getJobBuilderFactory() throws Exception {
        return new JobBuilderFactory(getJobRepository(), sendFileAfterExportListener());
    }

    @Bean
    public StepBuilderFactory getStepBuilderFactory() throws Exception {
        return new StepBuilderFactory(getJobRepository(), transactionManager);
    }

    @Bean
    public SendFileAfterExportListener sendFileAfterExportListener() {
        return new SendFileAfterExportListener();
    }

    @PostConstruct
    @Transactional
    public void init() throws Exception {
        JobExplorer jobExplorer = getJobExplorer();
        JobRepository jobRepository = getJobRepository();
        for (String jobName : jobExplorer.getJobNames()) {
            Set<JobExecution> runningJobExecutions = jobExplorer.findRunningJobExecutions(jobName);
            for (JobExecution runningJobExecution : runningJobExecutions) {
                runningJobExecution.setExitStatus(ExitStatus.UNKNOWN);
                runningJobExecution.setEndTime(new Date());
                jobRepository.update(runningJobExecution);
            }
        }
    }


}

Я действительно не знаю, откуда эта ошибка, может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Не могли бы вы проверить эту часть исключения, которое вы добавили. Это может быть причиной: «Циркулярная ссылка с использованием».

Циркулярная ссылка с использованием содержащего bean-компонента «pamdaBatchConfigurer» - рассмотрите возможность объявления фабричного метода как stati c для независимости от содержащего его экземпляра.

0 голосов
/ 18 февраля 2020

Самая важная часть трассировки стека: DatabaseType not found for product name: [MariaDB]

Смотрите здесь: https://github.com/spring-projects/spring-framework/issues/22344

Похожие проблемы:

DatabaseType Не найдено имя продукта: [Impala]

Пакет Spring. Тип базы данных не найден для названия продукта: [Informix Dynami c Сервер]

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