在之前写的那篇Ibatis 数据源的动态配置里,提到了使用动态写入配置文件(.properties文件)方式来动态配置数据源,起初这个方法还行,因为只有一个任务来写,然后读配置文件,但是当读写的工作设计到两个或者更多的线程后,这种方案的弊端就暴露出来了,文件IO占用的时间使得后面的线程读到的是其他线程的配置,搞得天下大乱。所以,多番研究之后,找到了另一种方式,可以说这种方法比前者优越得多,在多数情况下(保守估计),完全可以取代前面的方法,废话少说,配置如下:
故事的根源就是com.ibatis.sqlmap.client.SqlMapClientBuilder这个类,它是用来从给定的资源(如XML配置文件)中构造一个SqlMapClient的实例的,它旗下有四个静态方法(参考文档),这次用到的这个方法是:
public static SqlMapClient buildSqlMapClient(java.io.Reader reader, java.util.Properties props)
参数中:reader用于读取sql-map-config.xml,这个常见, 而这个props参数则可以用来包含sql-map-config.xml中所需要的参数,它是最关键的,可以将数据库连接所需的URL,用户名,密码用props动态传入。
sql-map-config.xml 配置:(省去了前一种方案用到的properties设置)
<sqlMapConfig>
<!-- properties value="misp/migrate/database.properties" -->
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property value="oracle.jdbc.driver.OracleDriver" name="JDBC.Driver"/>
<property value="${url}" name="JDBC.ConnectionURL"/>
<property value="${username}" name="JDBC.Username"/>
<property value="${password}" name="JDBC.Password"/>
</dataSource>
</transactionManager>
获得SqlMapClient实例的java代码:
public static SqlMapClient getSqlClient(Properties pro) throws IOException
{
Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader ("misp/migrate/sql-map-config.xml");
sqlClient = SqlMapClientBuilder.buildSqlMapClient(reader,pro);
return sqlClient;
}
在某个线程需要自己的SqlMapClient时,将URL等信息写入到Properties 里,然后获取一个SqlMapClient实例,然后将这个实例作为变量传入自己需要的地方。避免了多个线程去读同一个连接配置文件带来的尴尬。
分享到:
相关推荐
Spring3 整合 MyBatis3 配置多数据源动态选择 SqlSessionFactory 详细教程 本教程主要介绍了 Spring3 整合 MyBatis3 配置多数据源动态选择 SqlSessionFactory 的详细教程。下面将详细介绍如何实现 Spring 整合 ...
2. **全局配置文件设置**:在`mybatis-config.xml`中,需要配置数据库连接信息,例如数据源(DataSource)、环境(Environment)、事务管理器(TransactionManager)和SqlSessionFactory。例如: ```xml ...
总结来说,装饰模式在切换iBatis多数据源的应用中,起到了扩展和动态切换的作用,它允许我们在不修改原有数据源实现的基础上,通过组合的方式增加新的功能,实现了在运行时选择不同数据源的目标,同时保持了代码的...
给定的XML配置文件展示了如何在Spring中配置ibatis数据源以及ibatis事务管理器。首先,注释掉的`BasicDataSource`部分是用来配置数据源的,这里没有启用,而是选择了使用JNDI数据源。实际生产环境中,通常会使用...
2. 动态SQL:Ibatis支持动态SQL,可以在XML映射文件中编写条件语句,实现灵活的查询逻辑,比如根据条件选择性地包含或排除某些WHERE子句。 3. 缓存机制:Ibatis内置了缓存功能,可以在一定程度上提高数据访问效率,...
通过上述解析,我们可以看出ibatis配置文件在ibatis框架中的核心地位,它不仅定义了数据源和事务管理策略,还指定了SQL映射文件的位置,使得ibatis能够根据配置正确地执行SQL语句,完成数据库操作。
全局配置文件SqlMapConfig.xml是IBatis的入口,用于配置数据源、事务管理器等信息。例如,对于MySQL数据库,可以在SqlMapConfig.xml中添加如下配置: ```xml , iBatisNet.DataProviders.MySql"/> ;user=...
-- 数据源配置 --> <!-- JNDI数据源配置 --> <value>java:/oracle/payment ``` #### 配置iBatis SqlMapClient 接下来配置了iBatis的SqlMapClient,这里使用的是Spring的`...
1. 数据源配置:在Ibatis3中,我们需要配置Oracle的JDBC驱动,并指定数据库连接信息,如URL、用户名和密码等。 2. 映射文件:通过XML映射文件,定义SQL语句及其结果集映射。对于Oracle的特殊语法,如PL/SQL块,...
2. **Configuration**: 配置对象,存储了所有关于Ibatis的配置信息,包括数据源、映射文件、事务管理等。 3. **Mapper**: Mapper接口和Mapper XML 文件,定义了SQL操作。接口方法对应SQL的执行,XML文件中包含具体...
- **dataSource**:数据源配置,类型为`SIMPLE`,表示简单的数据源配置。 - **sqlMap**:指定SQL映射文件的位置,在本例中指向`Student.xml`。 ##### 3. Student.xml 文件 `Student.xml` 文件是具体的SQL映射文件...
2. `sqlMapConfig.xml`:iBatis的配置文件,定义了数据源、事务管理器以及映射文件的位置。 标签中提到的`springmvc`是Spring的一个模块,Spring MVC提供了模型-视图-控制器架构,用于处理HTTP请求和响应。配置...
1. **SqlMapConfig.xml**:这是整个iBATIS系统的配置文件,包含了数据源、事务管理器以及其他相关设置。开发者在此文件中定义数据库连接信息,以及映射文件的位置。 2. **Mapper接口/SqlMap.xml**:Mapper接口是...
- **SqlMapConfig.xml**: 这是iBatis的全局配置文件,包含了数据源、事务管理器等关键信息,定义了SqlMapClient的全局行为。 - **SqlMapClient**: 是iBatis的主要接口,负责执行SQL语句并处理结果集。 - **...
在数据读写分离的环境中,iBATIS可以通过配置不同的数据源,分别连接读库和写库。Spring可以管理和切换这些数据源,使得在执行写操作时使用写库,而在读操作时使用读库。 为了实现上述功能,我们需要集成和配置相关...
-- 数据源配置 --> ``` 2. **映射文件(mapper.xml)** 映射文件是定义SQL语句的地方,包括插入、更新、删除、查询等操作。比如: ```xml <!DOCTYPE mapper PUBLIC "-//mybatis.org//...
这里的`<sqlMapConfig>`是配置文件的根元素,其中包含了一系列的设置和数据源配置。 ### 设置部分 配置文件中的`<settings>`标签包含了多个关键参数,它们控制着ibatis的行为特性: - `cacheModelsEnabled`: 控制...
3. **配置iBatis**:创建SqlSessionFactoryBean,配置数据源、MyBatis的配置文件路径等。例如: ```xml ``` 4. **定义Mapper接口和XML配置**:在iBatis中,定义Mapper接口,并在XML文件中编写SQL语句。...