当前位置: 首页 > 知识库问答 >
问题:

Spring boot可用于遗留数据bean

太叔高义
2023-03-14

我有一个遗留的spring模块,它具有从dataSource到transactionManager的数据bean定义(基于C3P0和Hibernate)。我想在Spring Boot应用程序中重用所有这些bean定义。默认情况下,Spring Boot构建文件是从Initializer生成的。运行时,我遇到以下错误:

org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Generic.class]: @Bean definition illegally overridden by existing bean definition: Generic bean: class [com.mchange.v2.c3p0.ComboPooledDataSource]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=close; defined in class path resource*

数据源是数据bean中的bean。xml。我已经用@Configuration导入了xml bean定义:

@ImportResource({"classpath:data-beans.xml"})
public class XmlConfig {
}

共有1个答案

柴彬
2023-03-14

解决方案是在数据源上排除autconfiguration:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class, TransactionAutoConfiguration.class})

您还可以设置以下属性以抑制警告,但这不是一种好的做法:

spring.main.allow-bean-definition-overriding=true
 类似资料:
  • 虽然Django最适合用来开发新的应用,但也可以将它整合到遗留的数据库中。Django包含了很多工具,尽可能自动化解决这类问题。 这篇文章假设你了解Django的基础部分,它们在教程中提及。 一旦你的Django环境建立好之后,你可以按照这个大致的流程,整合你的现有数据库。 向Django提供你的数据库参数 你需要告诉Django你的数据库连接参数,以及数据库的名称。请修改DATABASES设置,

  • 在Spring Boot(2.2.2.release)应用程序中,我有反应endpoint(返回Mono或Flux),每个endpoint都使用反应WebClient调用另一个服务。这个“其他”服务是遗留的(非被动的)服务。 以下是我的问题: > 如果我的反应式endpoint正在调用这个非反应式endpoint,那么使用Webflux(反应式WebClient)是否有好处?

  • Java8不再支持JDBC-ODBC桥。在Java8中,有没有一种方法可以在没有桥接的情况下访问遗留的MDB文件?我所说的legacy是指Access2.0。UCanAccess不支持这样的旧版本,这是在这里建议的。

  • 虽然 Sequelize 自认为可以开箱即用, 但是如果你要使用应用之前遗留的资产和凭据,仅需要通过定义(否则生成)表和字段名称即可. 表 class User extends Model {} User.init({ // ... }, { modelName: 'user', tableName: 'users', sequelize, }); 字段 class MyModel

  • 我把我的mac更新到了Yosemite10.10。现在它给了我这个错误: 我该怎么办?

  • 虽然 Sequelize 自认为可以开箱即用, 但是如果你要处理遗留表并向前验证应用程序,仅需要通过定义(否则生成)表和字段名称即可. 表 class User extends Model {} User.init({ // ... }, { modelName: 'user', tableName: 'users', sequelize, }); 字段 class MyMode