JTA/XA: Atomikos + Spring + Hibernate 配置 注意事项

本人博客已迁移至 www.shangyang.me 欢迎大家访问

 

1. xaDataSource 配置如下. (DB2)


        	
        db2
        
        
                 com.ibm.db2.jcc.DB2XADataSource
        
        
               
	        
                        localhost
                        
                        50000
                        myDb
                        
                        
                        2


                                
               	
         
         
         10
         2
         30
         20000
         
         
                        select 1 from MyDb.table
                 

配置xaDataSource的时候应注意设置 reapTimeout, 其他的可以用默认值.

com.atomikos.jdbc.AtomikosDataSourceBean 继承自 com.atomikos.jdbc.AbstractDataSourceBean

AbstractDataSourceBean 将 reapTimeout定义如下

/**
 * Sets the amount of time (in seconds) that the connection pool will allow a connection
 * to be in use, before claiming it back. Optional. 
 * 
 * @param reapTimeout The timeout in seconds. Zero means unlimited. 
 *    Note that this value is only an indication; 
 *    the pool will check regularly as indicated by the maintenanceInteval property.
 *    Default is 300 seconds (5 minutes).
*/
public void setReapTimeout(int reapTimeout) {
	this.reapTimeout = reapTimeout;
}

可以看到 reapTimeout 是管理 Connection 被占用的时间.

如果不设置这个值,Atomikos使用默认的5分钟,那么在处理大批量数据读取的时候,一旦超过5分钟,就会抛出类似 Resultset is close 的错误.

2. Transaction 配置如下   


      
               true
       



 
 
       
             20000
       
       

      		
 
      
           
      
      
           
      
        

配置 Atomikos 的 JtaTransaction 的时候需注意,  单这样配置, 这里的设置的 20000 秒有可能不会生效。
Atomikos 对它的Transaction Manager 有个宏观上的设置. 可以参考
http://www.atomikos.com/Documentation/JtaProperties 
注意 com.atomikos.icatch.max_timeout  这个参数. 他的作用是给所有的 Transaction 的 Timeout设置一个最大值(单位是毫秒),默认值是5分钟,如果小于它生效,如果大于它不生效(还是5分钟)。
所以,如果没有设置 com.atomikos.icatch.max_timeout    这个参数的话,设置20000秒是不会生效的.

如何设置 com.atomikos.icatch.max_timeout , 文档里面描述,部署一个 jta.properties 文件在 classpath的根目录下(bin目录),但是不同的atomikos可能不同,我部署的是 transactions.properties文件.

如何设置

#Set the max timeout (in milliseconds) for local transactions
com.atomikos.icatch.max_timeout = 20000000

 这样的话, atomikosUserTransaction 设置的 Timeout 20000 才能生效.

 

     Reference: http://www.atomikos.com/Documentation

 

     附: Atomikos 源码

   

你可能感兴趣的:(Java)