一、概述
关于如何使用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配置多个数据源的具体实现。供大家一起学习。
原文:http://www.cnblogs.com/qqzpwin/p/3543686.html