Ibatisデータソースの動的構成の2つ


前に書いたIbatisデータソースの動的構成では、動的書き込みプロファイル(.propertiesファイル)方式を使用してデータソースを動的に構成することに言及しています.最初は、この方法はまあまあでした.1つのタスクだけが書かれているので、プロファイルを読みますが、読み書きの作業が2つ以上のスレッドに設計された後、このようなスキームの弊害が明らかになりました.ファイルIOが占有する時間は、後のスレッドが他のスレッドの構成を読み取って、天下を混乱させる.したがって、多くの研究の後、別の方法が見つかった.この方法は前者よりずっと優れていると言えるが、多くの場合(保守的な推定)、前の方法に完全に取って代わることができ、くだらないことは少なく、以下のように配置されている.
 
物語の根源はcom.ibatis.sqlmap.client.SqlMapClientBuilderというクラスは、XMLプロファイルなどの所与のリソースからSqlMapClientのインスタンスを構築するために使用され、傘下に4つの静的メソッド(参考ドキュメント)があります.今回使用されるこのメソッドは、次のとおりです.
    
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インスタンスを取得し、そのインスタンスを変数として必要な場所に転送します.複数のスレッドが同じ接続プロファイルを読むことによる気まずい思いを回避します.