在之前写的那篇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实例,然后将这个实例作为变量传入自己需要的地方。避免了多个线程去读同一个连接配置文件带来的尴尬。
分享到:
相关推荐
介绍Ibatis框架中需要同时连接多个资料库的方法,包括.net和Java两种
整合了ibatis和spring 采用了数据源的配置 ibatis有详细的解释
spring,myibatis,配置文件,数据源,web工程
是不是好东西你们去鉴定,SpringMVC + Spring + ibatis 可以配置多数据源,这个Demo 扩展性极强,就看你们自己如何发挥。
11.2 为其他数据源使用DAO模式 203 11.2.1 示例:为LDAP使用DAO 203 11.2.2 示例:为Web服务使用DAO 208 11.3 使用Spring DAO 209 11.3.1 编写代码 209 11.3.2 为什么使用Spring代替iBATIS 211 11.4 创建自己的DAO层...
SSM多数据源分包
打包好的DBCP配置相关jar包,配置DBCP时会很有用,包含commons-dbcp.jar与commons-pool.jar
struts spring2 ibatis整合代码实例 已经配置好的。数据库也配置好了。 可以适合mysql主从配置多个数据源的。
压缩包里有两个 springMVC+Ibatis 的项目:HessianServer(服务器端),HessianClient(客户端),解压导入到MyEclipse 更改配置文件中的数据源,建表(和实体类对应的表),执行客户端中的BasicClient.java文件即可...
使用struts2(json-plugin) + spring2 + ibatis2 + extjs2.2 + mysql5.0架构开发的图书管理系统,对学习struts2,json-plugin,spring2,ibatis2, ...* 部署时,注意修改相应的数据源配置applicationContext-common.xml
配置多数据源时,要让spring-boot不自动注入data-source和sqlSessionFactory。 。常问问题1,出现了如下BUG org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection....
generator的配置文件Tomcat-config ---tomcat的配置文件,配置了context以及数据源WEB-INF ---项目的部署目录架构思路:使用Tomcat做启动使用tomcat提供的数据源使用tomcat提供的热加载机制后期方便添加web界面功能...
5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源连接池 5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4...
表现层框架struts 2:讲解struts 2的入门配置、核心组件、标签库、国际化、数据校验、转换器、拦截器,并分别实现与hibernate、ibatis持久层框架的集成开发。 业务层框架spring:讲解spring的入门配置与ioc容器...
5.2配置数据源 5.2.1使用jndi数据源 5.2.2使用数据源连接池 5.2.3基于jdbc驱动的数据源 5.3在spring里使用jdbc 5.3.1处理失控的jdbc代码 5.3.2使用jdbc模板 5.3.3使用spring对jdbc的dao支持类 5.4在spring里...
5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源连接池 5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4...
表现层框架struts 2:讲解struts 2的入门配置、核心组件、标签库、国际化、数据校验、转换器、拦截器,并分别实现与hibernate、ibatis持久层框架的集成开发。 业务层框架spring:讲解spring的入门配置与ioc容器...
表现层框架struts 2:讲解struts 2的入门配置、核心组件、标签库、国际化、数据校验、转换器、拦截器,并分别实现与hibernate、ibatis持久层框架的集成开发。 业务层框架spring:讲解spring的入门配置与ioc容器...
-- 配置要拦截的url,防止2次提交或做其他數據統計用 <bean id="doubleSubmitInterceptor" class="com.ccc.filter.DoubleSubmitInterceptor"> <property name="mappingURL" value=".html" /> ...
ToolsGameServer环境搭建工具包apache-tomcat-7.0.57tomcat程序,需要做如下修改:conf/server.xml中添加指向GameServer的Context标签conf/context.xml 中添加数据源conf/web.xml添加数据源生命apache-mina-2.0.9-...