Spring 具有多个数据源的依赖项的启动应用程序
Spring Boot Application with dependency having multiple datasources
我正在尝试创建一个 Spring 引导应用程序,其中的依赖 jar context.xml 配置了多个数据源。
在我的 spring 引导应用程序中,我将 @ImportResource("context.xml") 添加到 @Configuration class 中,现在,我得到一个异常
"No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 4: XXXDataSource,YYYDataSource,ZZZDataSource,aaaaDataSource".
我阅读了 Spring Boot 中有关多个数据源的文档,但无法解决此问题。不确定,我如何配置我的 class,因为我无法更改依赖 jar 来更改数据源的配置方式。
请帮忙!
您可以在数据源 bean 上使用 "Primary" 属性,让您的自动装配默认选择它。
<bean primary="true|false"/>
如果您使用的是 Java 配置,请改用 @Primary 注释。
@Component
public class FooService {
private FooRepository fooRepository;
@Autowired
public FooService(FooRepository fooRepository) {
this.fooRepository = fooRepository;
}
}
@Component
public class JdbcFooRepository {
public JdbcFooService(DataSource dataSource) {
// ...
}
}
@Primary
@Component
public class HibernateFooRepository {
public HibernateFooService(SessionFactory sessionFactory) {
// ...
}
}
如果这仍然不能解决问题,您可以为 bean 命名,并在 java 类 中使用 @Qualifier 注释,或者在 "ref" 中使用属性您的 Spring XML 配置。
https://spring.io/blog/2014/11/04/a-quality-qualifier
@Autowired
@Qualifier( "ios") // the use is unique to Spring. It's darned convenient, too!
private MarketPlace marketPlace ;
如果您需要 jar 中的一个数据源并且无法修改配置,而不是从 jar 中导入 xml,请将您需要的配置复制到您自己的本地 spring上下文配置。
我正在尝试创建一个 Spring 引导应用程序,其中的依赖 jar context.xml 配置了多个数据源。
在我的 spring 引导应用程序中,我将 @ImportResource("context.xml") 添加到 @Configuration class 中,现在,我得到一个异常 "No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 4: XXXDataSource,YYYDataSource,ZZZDataSource,aaaaDataSource".
我阅读了 Spring Boot 中有关多个数据源的文档,但无法解决此问题。不确定,我如何配置我的 class,因为我无法更改依赖 jar 来更改数据源的配置方式。
请帮忙!
您可以在数据源 bean 上使用 "Primary" 属性,让您的自动装配默认选择它。
<bean primary="true|false"/>
如果您使用的是 Java 配置,请改用 @Primary 注释。
@Component
public class FooService {
private FooRepository fooRepository;
@Autowired
public FooService(FooRepository fooRepository) {
this.fooRepository = fooRepository;
}
}
@Component
public class JdbcFooRepository {
public JdbcFooService(DataSource dataSource) {
// ...
}
}
@Primary
@Component
public class HibernateFooRepository {
public HibernateFooService(SessionFactory sessionFactory) {
// ...
}
}
如果这仍然不能解决问题,您可以为 bean 命名,并在 java 类 中使用 @Qualifier 注释,或者在 "ref" 中使用属性您的 Spring XML 配置。
https://spring.io/blog/2014/11/04/a-quality-qualifier
@Autowired
@Qualifier( "ios") // the use is unique to Spring. It's darned convenient, too!
private MarketPlace marketPlace ;
如果您需要 jar 中的一个数据源并且无法修改配置,而不是从 jar 中导入 xml,请将您需要的配置复制到您自己的本地 spring上下文配置。