本文主要介紹如何在一個springboot項目配置兩個數據源(mysql和oracle);java
一、引進相關依賴mysql
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--oracle 驅動 --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.1.0.7.0</version> </dependency>
當ojdbc驅動包版本太低,會報以下圖所示錯誤,即驅動jar與數據庫版本不兼容:spring
二、於applicationContext.yml中配置數據源鏈接參數:sql
1 Spring: 2 datasource: 3 base: 4 driver-class-name: com.mysql.jdbc.Driver 5 jdbc-url: ${base.db.url} 6 username: ${base.db.username} 7 password: ${base.db.password} 8 oa: 9 driver-class-name: oracle.jdbc.driver.OracleDriver 10 jdbc-url: ${oa.db.urL} 11 username: ${oa.db.username} 12 password: ${oa.db.password} 13 hikari: 14 max-lifetime: 60000 15 login-timeout: 5 16 validation-timeout: 3000 17 connection-timeout: 60000 18 idle-timeout: 60000
三、多數據源配置文件,讀取對應鏈接參數數據庫
Package com.**.config; 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; public class MultiDataSourceConfig { @Bean (name = "primaryDataSource") @Qualifier("primaryDataSource") @Primary //定義主數據源 @ConfigurationProperties (prefix = "spring.datasource.Base") public DataSource primaryDataSource () { return DataSourceBuilder.create().build (); } @Bean (name = "secondaryDataSource") @Qualifier ("secondaryDataSource") @ConfigurationProperties (prefix = "spring.datasource.oa") public DataSource secondaryDataSource () { return DataSourceBuilder.create().build (); } }
三、主數據源配置,指定掃描對應mapper文件以及對應xml文件,在使用mapper包下的mapper文件時會自動使用對應sql會話apache
Package com.**.config; 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.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframeworkcore.io.support.PathMatchingResourcePatternResolver; import org.spr ingframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; @Configuration @MapperScan (basePackages = "com.**.mapper", sqlSessionTemplateRef = "primarySqlSessionTemplate") public class SqlSessionTemplate1 { @Bean (name = "primarySqlSessionFactory") @Primary public SqlSessionFactory primarySqlSessionFactory (@Qualifier("primaryDataSource") DataSource dataSource) throws Exception{ SqLSessionFactoryBean bean = new SqlSessionFactoryBean (); bean.setDataSource (dataSource); bean.setMapperLocations (new PathMatchingResourcePatternResolver().getResources (locationPattern: "classpath: mybatis/mapper/*. XmL")); return bean.getObject(); } /** * 配置聲明式事務管理器 */ @Bean (name = "primaryTransactionManager") @Primary public PlatformTransactionManager primaryTransactionManager (@Qualifier("primaryDataSource") DataSource dataSource) { return new DataSourceTransactionManager (dataSource); } @Bean (name = "primarySqlSessionTemplate") @Primary public SqlSessionTemplatel primarySqlSessionTemplate(@Qualifier("primarySqlSesionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplatel(sqlSessionFactory); } }
四、第二數據源配置,指定掃描對應mapper文件以及對應xml文件,在使用mapper包下的mapper文件時會自動使用對應sql會話springboot
Package com.**.config; 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.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.secondary; import org.springframeworkcore.io.support.PathMatchingResourcePatternResolver; import org.spr ingframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; @Configuration @MapperScan (basePackages = "com.**.oraclemapper", sqlSessionTemplateRef = "secondarySqlSessionTemplate") public class SqlSessionTemplate2 { @Bean (name = "secondarySqlSessionFactory") public SqlSessionFactory secondarySqlSessionFactory (@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception{ SqLSessionFactoryBean bean = new SqlSessionFactoryBean (); bean.setDataSource (dataSource); bean.setMapperLocations (new PathMatchingResourcePatternResolver().getResources (locationPattern: "classpath: mybatis/oraclemapper/*. XmL")); return bean.getObject(); } /** * 配置聲明式事務管理器 */ @Bean (name = "secondaryTransactionManager") public PlatformTransactionManager secondaryTransactionManager (@Qualifier("secondaryDataSource") DataSource dataSource) { return new DataSourceTransactionManager (dataSource); } @Bean (name = "secondarySqlSessionTemplate") public SqlSessionTemplatel secondarySqlSessionTemplate(@Qualifier("secondarySqlSesionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplatel(sqlSessionFactory); } }
至此,在service層能夠像單數據源同樣使用了。session