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 注释。

http://docs.spring.io/spring-framework/docs/4.0.4.RELEASE/javadoc-api/org/springframework/context/annotation/Primary.html

 @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上下文配置。