前言
在项目的开发中,经常会遇到需要连接多个多种数据库的情况,mysql、oracle等等,下面详细讲解如何在一个服务中进行多种数据库的配置。
第一步:
在yml配置文件中配置多个数据源,如下,根据实际情况更改自己的配置即可。
spring: datasource: # 配置多个数据源 primary: type: com.alibaba.druid.pool.druiddatasource jdbc-url: jdbc:oracle:thin:@171.28.7.55:1521:example username: root password: root driver-class-name: oracle.jdbc.oracledriver #数据库链接驱动 secondary: type: com.alibaba.druid.pool.druiddatasource jdbc-url: jdbc:mysql://127.0.0.1:3306/exinfo?useunicode=true&characterencoding=utf-8 username: root password: root driver-class-name: com.mysql.cj.jdbc.driver #数据库链接驱动
第二步:
创建多个配置类,以配置oracle和mysql两个数据库为例,可参考代码进行延展。
1.在配置类中需要进行数据源配置
@bean @configurationproperties(prefix = "spring.datasource.primary") @primary public datasource db1datasource() { return datasourcebuilder.create().build(); }
@configurationproperties(prefix = "spring.datasource.primary")用于绑定yml中的第一个数据源配置,这些配置项会被自动映射到db1datasource所创建的数据源实例中。通过datasourcebuilder. create()创建一个新的数据源构建器,并调用.build()方法来完成数据源实例的创建。 如果有多个相同类型的bean,使用@primary注解可以标记出一个优先(默认)使用的bean。所以使用最多的数据库可以使用@primary注解。
2.配置mybatis的sqlsessionfactory,它是mybatis操作数据库的核心组件,负责创建sqlsession对象,执行sql语句等。使用名称为db1datasource的数据源bean作为构造sqlsessionfactory的依赖。
@bean @primary public sqlsessionfactory db1sqlsessionfactory(@qualifier("db1datasource") datasource datasource) throws exception { sqlsessionfactorybean bean = new sqlsessionfactorybean(); bean.setdatasource(datasource); //bean.getobject().getconfiguration().setmapunderscoretocamelcase(true);//设置下划线转驼峰式 return bean.getobject(); }
3.配置事务管理器(datasourcetransactionmanager),它基于数据源(datasource)的事务管理实现,专门用于jdbc事务处理。注解明确指定使用名为db1datasource的数据源bean。
@bean @primary public datasourcetransactionmanager db1transactionmanager(@qualifier("db1datasource") datasource datasource) { return new datasourcetransactionmanager(datasource); }
4.配置sqlsessiontemplate实例,它是mybatis与spring集成的关键组件,提供了线程安全的sql会话执行环境。
@bean @primary public sqlsessiontemplate db1sqlsessiontemplate(@qualifier("db1sqlsessionfactory") sqlsessionfactory sqlsessionfactory){ return new sqlsessiontemplate(sqlsessionfactory); }
5.类注解@mapperscan
basepackages= "com.example.mapper":指定了mapper接口所在的包路径。spring会扫描这个包及其子包下的所有接口,如果接口符合mybatis mapper的规范,spring会自动生成代理对象来处理sql调用。
sqlsessiontemplateref = "db1sqlsessiontemplate":指定了与mapper接口绑定的sqlsessiontemplate的名称。在执行mapper接口的方法时,spring会使用这个指定的sqlsessiontemplate来管理sql会话。这里的db1sqlsessiontemplate是之前通过@bean方法定义的sqlsessiontemplate beam的名称。
datasourceprimaryconfig完整代码如下:
package com.example.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.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 org.springframework.jdbc.datasource.datasourcetransactionmanager; import javax.sql.datasource; @configuration @mapperscan(basepackages = "com.example.mapper", sqlsessiontemplateref = "db1sqlsessiontemplate") public class datasourceprimaryconfig { @bean @configurationproperties(prefix = "spring.datasource.primary") @primary public datasource db1datasource() { return datasourcebuilder.create().build(); } @bean @primary public sqlsessionfactory db1sqlsessionfactory(@qualifier("db1datasource") datasource datasource) throws exception { sqlsessionfactorybean bean = new sqlsessionfactorybean(); bean.setdatasource(datasource); //bean.getobject().getconfiguration().setmapunderscoretocamelcase(true);//设置下划线转驼峰式 return bean.getobject(); } @bean @primary public datasourcetransactionmanager db1transactionmanager(@qualifier("db1datasource") datasource datasource) { return new datasourcetransactionmanager(datasource); } @bean @primary public sqlsessiontemplate db1sqlsessiontemplate(@qualifier("db1sqlsessionfactory") sqlsessionfactory sqlsessionfactory){ return new sqlsessiontemplate(sqlsessionfactory); } }
datasourcesecondaryconfig代码如下:
package com.example.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.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.jdbc.datasource.datasourcetransactionmanager; import javax.sql.datasource; @configuration @mapperscan(basepackages = "com.example.mapper2", sqlsessiontemplateref = "db2sqlsessiontemplate") public class datasourcesecondaryconfig { @bean @configurationproperties(prefix = "spring.datasource.secondary") public datasource db2datasource() { return datasourcebuilder.create().build(); } @bean public sqlsessionfactory db2sqlsessionfactory(@qualifier("db2datasource") datasource datasource) throws exception { sqlsessionfactorybean bean = new sqlsessionfactorybean(); bean.setdatasource(datasource); bean.getobject().getconfiguration().setmapunderscoretocamelcase(true);//设置下划线转驼峰式 return bean.getobject(); } @bean public datasourcetransactionmanager db2transactionmanager(@qualifier("db2datasource") datasource datasource) { return new datasourcetransactionmanager(datasource); } @bean public sqlsessiontemplate db2sqlsessiontemplate(@qualifier("db2sqlsessionfactory") sqlsessionfactory sqlsessionfactory){ return new sqlsessiontemplate(sqlsessionfactory); } }
第三步:
根据配置文件,创建两个mapper包如下:
在不同的mapper包下进行不同数据库的交互即可。
总结
到此这篇关于springboot项目连接多种数据库该如何操作的文章就介绍到这了,更多相关springboot连接多种数据库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论