使用spring boot 改造老專案,多個數據源問題
阿新 • • 發佈:2019-02-20
使用spring boot 改造老專案,因為資料來源有多個,啟動時一直報如下錯誤
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 5:
原來是
@EnableAutoConfiguration
這個註解會把sping的xml檔案中配置的資料來源全部都自動注入,不會像改造前那樣會預設注入一個,當使用其他資料來源時再呼叫另外的資料來源。
根據spirng boot的官方文件,可以如下配置多個數據源
@Bean @Primary @ConfigurationProperties(prefix="datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix="datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); }
但是,既然是改造老專案,當然是改動越少越好。
於是可以通過如下的方式禁止springboot自動注入多個數據源
@SpringBootApplication @EnableAutoConfiguration(exclude={ DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, //(如果使用Hibernate時,需要加) DataSourceTransactionManagerAutoConfiguration.class, }) @ImportResource({"classpath:spring-servlet.xml"}) public class JzApplication { public static void main(String[] args) throws Exception { ApplicationContext ctx = SpringApplication.run(JzApplication .class,args); } }
改完後,啟動專案,不再提示注入失敗,讀取資料庫也正常。