本篇文章给大家带来的内容是关于springboot项目配置两个数据源的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
本文主要介绍如何在一个springboot项目配置两个数据源(mysql和oracle);
1、引进相关依赖
<!-- 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与数据库版本不兼容:
2、于applicationContext.yml中配置数据源连接参数:
Spring: datasource: base: driver-class-name: com.mysql.jdbc.Driver jdbc-url: ${base.db.url} username: ${base.db.username} password: ${base.db.password} oa: driver-class-name: oracle.jdbc.driver.OracleDriver jdbc-url: ${oa.db.urL} username: ${oa.db.username} password: ${oa.db.password} hikari: max-lifetime: 60000 login-timeout: 5 validation-timeout: 3000 connection-timeout: 60000 idle-timeout: 60000
3、多数据源配置文件,读取对应连接参数
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 (); } }
3、主数据源配置,指定扫描对应mapper文件以及对应xml文件,在使用mapper包下的mapper文件时会自动使用对应sql会话
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); } }
4、第二数据源配置,指定扫描对应mapper文件以及对应xml文件,在使用mapper包下的mapper文件时会自动使用对应sql会话
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层可以像单数据源一样使用了。
以上是springboot项目配置两个数据源的方法的详细内容。更多信息请关注PHP中文网其他相关文章!