1. 程式人生 > >使用spring boot 改造老專案,多個數據源問題

使用spring boot 改造老專案,多個數據源問題

     使用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);
	}
}

改完後,啟動專案,不再提示注入失敗,讀取資料庫也正常。