spring-boot - JobScope 和覆盖 bean
问题描述
我正在尝试将 spring 批处理作业升级到 spring boot 2.1.x。我有使用“工作”范围的 bean。升级后出现错误 bean ...,无法注册。已经定义了具有该名称的 bean ...并且覆盖已禁用。
我可以设置属性 spring.main.allow-bean-definition-overriding=true 并使其超过错误。
我的问题是,如果我使用 Job 或 Step 范围,我是否总是需要设置此属性?
完整的错误信息:
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'reportWriterListener' defined in BeanDefinition defined in class path resource [jobs/base_config.xml]: Cannot register bean definition [Root bean: class [org.springframework.aop.scope.ScopedProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in BeanDefinition defined in class path resource [jobs/base_config.xml]] for bean 'reportWriterListener': There is already [Generic bean: class [com.zionsbancorp.spring.batch.batch.ReportWriterJobListener]; scope=job; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=false; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [jobs/base_config.xml]] bound.
堆栈跟踪:
org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'reportWriterListener' defined in BeanDefinition defined in class path resource [jobs/base_config.xml]: Cannot register bean definition [Root bean: class [org.springframework.aop.scope.ScopedProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in BeanDefinition defined in class path resource [jobs/base_config.xml]] for bean 'reportWriterListener': There is already [Generic bean: class [com.zionsbancorp.spring.batch.batch.ReportWriterJobListener]; scope=job; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=false; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [jobs/base_config.xml]] bound.
at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:897) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.batch.core.scope.BatchScopeSupport.createScopedProxy(BatchScopeSupport.java:159) ~[spring-batch-core-4.1.2.RELEASE.jar:4.1.2.RELEASE]
at org.springframework.batch.core.scope.BatchScopeSupport.postProcessBeanFactory(BatchScopeSupport.java:130) ~[spring-batch-core-4.1.2.RELEASE.jar:4.1.2.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:286) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:174) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
at com.zbc.zci.aspirercif.Application.main(Application.java:48) [classes/:na]
配置片段
<bean id="reportWriterListener" class="com.zbc.spring.batch.batch.ReportWriterJobListener" scope="job">
<constructor-arg value="${report.file}"/>
</bean>
解决方案
推荐阅读
- java - 如何将三元运算符放在 for 循环的括号内
- mqtt - 本地 MQTT 代理在桥接到云 MQTT 代理时未读取 .conf 文件
- android - 如何使用管道从视频中提取帧并每 1 秒读取一次?
- c++ - for循环只执行一次,将一个数字提升到另一个数字
- python - 无法使用 python 连接到远程 MySql 数据库
- java - 致命异常:主要(Android标准)
- c# - 在 PuppeteerSharp 中取消下载
- python - 用于 Flask 应用程序的 Docker 未运行 - 连接错误
- microsoft-graph-api - MS Graph Get User with Expand=Extensions 返回状态 500
- android - 在 Xamarin Android 中使用 Jar 文件的问题