Основная проблема бобов в весенней партии - PullRequest
0 голосов
/ 21 мая 2019

У меня есть приложение для пакетной обработки, в котором мне нужно переопределить бины, такие как jobLauncher. Но когда я попытался запустить команду чистой установки, у меня возникает проблема переопределения bean-компонента. Он работает нормально на моей локальной машине, но у меня проблема из-за Дженкинса, я не знаю, почему это не происходит на моей локальной машине.

Я посмотрел на код пружины, они расширяют класс конфигурации и переопределяют бин. Я пытался расширить класс SimpleBatchConfiguration, но столкнулся с некоторой проблемой, и я не думаю, что это хорошая идея.

JobLaunher Bean in Application:

    @Bean
    public JobLauncher jobLauncher(JobRepository jobRepository) throws Exception {
        SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
        jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
        jobLauncher.setJobRepository(jobRepository);
        jobLauncher.afterPropertiesSet();
        return jobLauncher;
    }

JobLauncher in Spring Batch:

    @Override
    @Bean
    public JobLauncher jobLauncher() throws Exception {
        return createLazyProxy(jobLauncher, JobLauncher.class);
    }

Error Logs:


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

Description:

The bean 'jobLauncher', defined in com.orange.alc.dabek.dataload.config.BatchConfiguration, could not be registered. A bean with that name has already been defined in class path resource [org/springframework/batch/core/configuration/annotation/SimpleBatchConfiguration.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

2019-05-20 20:26:45.056 ERROR 12892 --- [           main] o.s.test.context.TestContextManager      : Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@29f8134] to prepare test instance [com.orange.alc.dabek.dataload.job.PhoneJobTest@611a2d82]

java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
    at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
    at 

Я хочу переопределить бобы из весенней партии. Я обнаружил, что не очень хороший подход к использованию spring.main.allow-bean-definition-overriding = true, поскольку он также скрывает некоторую выгоду. Я также не нахожу то же свойство в моем application.yml. Пожалуйста, дайте мне знать о лучшем решении.

1 Ответ

1 голос
/ 21 мая 2019

Чтобы настроить компоненты инфраструктуры Spring Batch (репозиторий заданий, средство запуска заданий, менеджер транзакций и т. Д.), Необходимо предоставить пользовательский BatchConfigurer (см. Раздел JavaConfig справочной документации).

Вы можете сделать свой класс конфигурации пакета расширенным org.springframework.boot.autoconfigure.batch.BasicBatchConfigurer из Spring Boot или org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer из Spring Batch и переопределить метод createJobLauncher.

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