89fb1e0591c890a404ada8f85c8dc48c.png

   点击上方蓝字关注并置顶公众号,每天第一时间获取最新干货知识    

933099580bc2a375f3aedbf6b94bd168.pngcf42e2c191cc1d4b3963ceec91a95789.png

前言

a935b76c4f4c448abd859a514a5cf738.png

最近项目中遇到了多数据源的问题。也是试了好几种办法,有不少坑,特意来记录下。

多数据源,就是在一个项目中,要向多个数据库交互。

我遇到的场景就是,要查询自己本地的数据向多个不同的数据源插入数据。

你要保证的是,首先,你原本的数据源不动,因为你不能因为这一个需求,就把原来的数据源给切换了,那之前的功能不就是瞎了。所以说,最主要的就是,你要另外提供新的数据源来处理数据。互不干扰。

这里我用到的是mybatis+spring的方式。当然你可以用jdbc直连的方式。不推荐,太麻烦,sql写起来费劲。

1034c6dab091640cf0f8fd5d6449d9f6.png

cf42e2c191cc1d4b3963ceec91a95789.png

1、引入依赖

a935b76c4f4c448abd859a514a5cf738.png

新建sringboot项目

<dependency>    <groupId>org.mybatis.spring.bootgroupId>    <artifactId>mybatis-spring-boot-starterartifactId>    <version>1.1.1version>dependency><dependency>    <groupId>mysqlgroupId>    <artifactId>mysql-connector-javaartifactId>    <version>5.1.47version>dependency>

cf42e2c191cc1d4b3963ceec91a95789.png

2、mybatis配置文件

a935b76c4f4c448abd859a514a5cf738.png

db.properties

#xc1mysql1.driver=com.mysql.jdbc.Drivermysql1.url=jdbc:mysql://localhost:3306/xc1?useSSL=falsemysql1.username=rootmysql1.password=123456#xc2mysql2.driver=com.mysql.jdbc.Drivermysql2.url=jdbc:mysql://localhost:3306/xc2?useSSL=falsemysql2.username=rootmysql2.password=123456

configuration.xml

/span>        "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>        <properties resource="db.properties"/>        <environments default="dev1">        <environment id="dev1">            <transactionManager type="JDBC" />            <dataSource type="POOLED">                <property name="driver" value="${mysql1.driver}"/>                <property name="url" value="${mysql1.url}"/>                <property name="username" value="${mysql1.username}"/>                <property name="password" value="${mysql1.password}"/>            dataSource>        environment>        <environment id="dev2">            <transactionManager type="JDBC" />            <dataSource type="POOLED">                <property name="driver" value="${mysql2.driver}"/>                <property name="url" value="${mysql2.url}"/>                <property name="username" value="${mysql2.username}"/>                <property name="password" value="${mysql2.password}"/>            dataSource>        environment>    environments>        <mappers>        <mapper resource="generator/UserDao.xml"/>    mappers>configuration>
cf42e2c191cc1d4b3963ceec91a95789.png

3、实现插入

a935b76c4f4c448abd859a514a5cf738.png
import java.io.IOException;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class Test {    public static void main(String[] args) throws IOException {        //配置文件的名称        String resource = "configuration.xml";        //通过Mybatis包中的Resources对象很轻松的获取到配置文件        Reader reader = Resources.getResourceAsReader(resource);        //通过SqlSessionFactoryBuilder创建 第二个参数是指定环境        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"dev2");        //获得session实例        SqlSession session =sqlSessionFactory.openSession();        UserDao mapper = session.getMapper(UserDao.class);        User user = new User();        user.setName("xx");        //完成数据库的插入        mapper.insert(user);        session.commit();        session.close();        System.out.println("ok");    }}
cf42e2c191cc1d4b3963ceec91a95789.png

总结

a935b76c4f4c448abd859a514a5cf738.png

这样就轻松实现动态数据源的切换了,只需要改变环境参数就行。非常的方便。

创作不易,如果对你有帮助,麻烦三连。点赞,在看,转发。23934768a77cc52ea90a3df1b15815e5.png23934768a77cc52ea90a3df1b15815e5.png23934768a77cc52ea90a3df1b15815e5.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐