关于MyBatis如何配置多个数据源

作者:%e5%90%ac%e8%a7%81%e4%bd%a0%e7%9a%84%e5%a3%b0%e9%9 和java相关  

一、概述

关于如何使用MyBatis配置多个数据源,网上很多资料都是将Spring和MyBatis相结合,实现多数据源。

有的时候,项目本身就比较小,就不需要使用过多的第三方的东西,因此,尝试仅使用MyBatis配置多个数据源。

二、实现方式

MyBatis版本:3.2.0

官方关于如何配置多个数据源,并没有详尽的介绍,只是一笔带过。参考一网友翻译的资料,描述如下:

MyBatis 可以配置多种环境。这会帮助你将 SQL 映射应用于多种数据库之中。例如, 你也许为开发要设置不同的配置, 测试和生产环境。 或者你可能有多种生产级数据库却共享 相同的模式,所以你会想对不同数据库使用相同的 SQL 映射。

具体实现方式--配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="DB1">
            <environment id="DB1">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver"
                    value="com.ibm.db2.jcc.DB2Driver" />
                <property name="url"
                    value="jdbc:db2://localhost:50000/DB1" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
       
        <environment id="DB2">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver"
                    value="com.ibm.db2.jcc.DB2Driver" />
                <property name="url"
                    value="jdbc:db2://localhost:50000/DB2" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
       
    </environments>
</configuration>

 

具体实现方式---Java代码

public class DataSourceSqlSessionFactory {

    private Logger logger = LoggerFactory.getLogger(getClass());
   
    private final static String MYBATIS_CONFIG = "mybatis-config-datasource.xml" ;
   
    public final static String AMDB_ENVIRONMENT_ID = "DB1" ;
   
    public final static String AODB_ENVIRONMENT_ID = "DB2" ;
   
    public SqlSessionFactory getSqlSessionFactory(String environment){
        InputStream inputStream = null ;
        SqlSessionFactory sqlSessionFactory = null ;
        try {
            inputStream = Resources.getResourceAsStream(MYBATIS_CONFIG);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream , environment);
            inputStream.close();
            logger.info("获取 [ " +environment + " ] 数据源连接成功");
        } catch (IOException e) {
            logger.error("获取 [ " +environment + " ] 数据源连接失败,错误信息 :" + e);
        }
        return sqlSessionFactory ;
    }
   
}

 

第二个类(部分代码)

public void contextInitialized(ServletContextEvent event) {
        try {
           
            //注释:实例化 DataSourceSqlSessionFactory 类
            DataSourceSqlSessionFactory dataSourceSqlSessionFactory = new DataSourceSqlSessionFactory();
           
            //注释:将多个数据源保存在 ServletContext 容器中
            event.getServletContext().setAttribute(
                    DataSourceSqlSessionFactory.AMDB_ENVIRONMENT_ID,
                    dataSourceSqlSessionFactory.getSqlSessionFactory(DataSourceSqlSessionFactory.AMDB_ENVIRONMENT_ID));
           
            event.getServletContext().setAttribute(
                    DataSourceSqlSessionFactory.AODB_ENVIRONMENT_ID,
                    dataSourceSqlSessionFactory.getSqlSessionFactory(DataSourceSqlSessionFactory.AODB_ENVIRONMENT_ID));
           
            logger.info("获取多数据源连接成功");
           
        } catch (Exception e) {
            logger.error("获取多数据源连接失败,错误信息 : " + e);
        }
    }

 

以上为MyBatis配置多个数据源的具体实现。供大家一起学习。

相关资料:

关于MyBatis如何配置多个数据源来源网络,如有侵权请告知,即处理!

编程Tags: