`
goodguyzl
  • 浏览: 46031 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Ibatis 数据源的动态配置之二

阅读更多

        在之前写的那篇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实例,然后将这个实例作为变量传入自己需要的地方。避免了多个线程去读同一个连接配置文件带来的尴尬。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics