具有多个数据源的依赖项的Spring Boot应用程序

时间:2016-06-21 19:28:04

标签: spring spring-boot spring-data datasource jdbctemplate

我正在尝试使用依赖jar创建一个Spring Boot应用程序,该jar已经配置了多个数据源的context.xml。

在我的Spring启动应用程序中,我将@ImportResource(“context.xml”)添加到@Configuration类中,现在我得到一个异常, “没有定义[javax.sql.DataSource]类型的限定bean:期望的单个匹配bean但找到4:XXXDataSource,YYYDataSource,ZZZDataSource,aaaaDataSource”。

我在Spring Boot中阅读了有关多个数据源的文档,但无法解决此问题。不确定,我如何配置我的类,因为我不能更改依赖jar来改变数据源的配置方式。

请帮忙!

1 个答案:

答案 0 :(得分:0)

您可以使用数据源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注释,或者在Spring XML配置中使用“ref”属性。

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