一、概述
关于如何使用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配置多个数据源的具体实现。供大家一起学习。