今兒公司要搞個A庫數據遷移到B庫,但是表結構又不一樣,有的數據還要查其他第三方服務。於是就搞了個多數據源DEMO,之前也弄過多數據源,讀寫分離操作使用的,採用AOP自定義註解控制。
spring: datasource: monit: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: XXX username: root password: root pool: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: XXX username: root password: root
這兒Springboot可能會報異常, com.mysql.cj.jdbc.Driver要選擇2.1.5以上的Springboot父級,若選用2.0.0.RELEASE就用不了這個。
主要的還是在這兒:
目錄建成這個樣子,然後就是配置代碼了...
import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.example.migration.mappers.monit", sqlSessionTemplateRef = "monitSessionTemplate") public class MonitConfig { //將這個對象放入Spring容器中 @Bean(name = "monitDataSource") //表示這個數據源是默認數據源 @Primary // 讀取application.properties中的配置參數映射成爲一個對象 // prefix表示參數的前綴 @ConfigurationProperties(prefix = "spring.datasource.monit") public DataSource getMonitDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "monitSessionFactory") // 表示這個數據源是默認數據源 @Primary //@Qualifier表示查找Spring容器中名字爲test1DataSource的對象 public SqlSessionFactory monitSessionFactory(@Qualifier("monitDataSource") DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(datasource); return bean.getObject(); } @Bean("monitSessionTemplate") // 表示這個數據源是默認數據源 @Primary public SqlSessionTemplate monitSessionTemplate(@Qualifier("monitSessionFactory") SqlSessionFactory sessionfactory) { return new SqlSessionTemplate(sessionfactory); } }
代碼如上,其他就正常的操作。