浏览代码

#87 修复数据源加载错误

zhouhao 6 年之前
父节点
当前提交
91f4d7753b

+ 25 - 15
hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/AtomikosDataSourceConfig.java

@@ -3,9 +3,12 @@ package org.hswebframework.web.datasource.jta;
 import com.atomikos.jdbc.AtomikosDataSourceBean;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.hswebframework.web.bean.FastBeanCopier;
 import org.hswebframework.web.datasource.config.DynamicDataSourceConfig;
 
+import javax.sql.XADataSource;
 import java.sql.SQLException;
 import java.util.Properties;
 
@@ -15,27 +18,34 @@ import java.util.Properties;
 @EqualsAndHashCode(callSuper = true)
 @Slf4j
 @Data
-public class AtomikosDataSourceConfig extends DynamicDataSourceConfig{
-    private static final long serialVersionUID = 5588085000663972571L;
-    private int minPoolSize = 5;
-    private int maxPoolSize = 200;
-    private int borrowConnectionTimeout = 60;
-    private int reapTimeout = 0;
-    private int maxIdleTime = 60;
-    private int maintenanceInterval = 60;
-    private int defaultIsolationLevel = -1;
-    private String xaDataSourceClassName = null;
-    private int loginTimeout = 0;
-    private String testQuery = null;
-    private int maxLifetime = 0;
-    private Properties xaProperties = null;
+public class AtomikosDataSourceConfig extends DynamicDataSourceConfig {
+    private static final long       serialVersionUID        = 5588085000663972571L;
+    private              int        minPoolSize             = 5;
+    private              int        maxPoolSize             = 200;
+    private              int        borrowConnectionTimeout = 60;
+    private              int        reapTimeout             = 0;
+    private              int        maxIdleTime             = 60;
+    private              int        maintenanceInterval     = 60;
+    private              int        defaultIsolationLevel   = -1;
+    private              String     xaDataSourceClassName   = null;
+    private              int        loginTimeout            = 0;
+    private              String     testQuery               = null;
+    private              int        maxLifetime             = 0;
+    private              Properties xaProperties            = null;
     //初始化超时时间
-    private int initTimeout = 10;
+    private              int        initTimeout             = 10;
 
+    @SneakyThrows
     public void putProperties(AtomikosDataSourceBean atomikosDataSourceBean) {
+
         if (null != xaProperties) {
             xaProperties.entrySet().forEach(entry -> entry.setValue(String.valueOf(entry.getValue())));
         }
+        //fix #87
+        XADataSource dataSource = (XADataSource) Class.forName(getXaDataSourceClassName()).newInstance();
+        FastBeanCopier.copy(xaProperties, dataSource);
+        atomikosDataSourceBean.setXaDataSource(dataSource);
+
         atomikosDataSourceBean.setXaDataSourceClassName(getXaDataSourceClassName());
         atomikosDataSourceBean.setBorrowConnectionTimeout(getBorrowConnectionTimeout());
         if (loginTimeout != 0) {

+ 9 - 0
hsweb-datasource/hsweb-datasource-jta/src/test/resources/application.yml

@@ -9,6 +9,10 @@ spring:
           url : jdbc:h2:mem:core;DB_CLOSE_ON_EXIT=FALSE
           username : sa
           password :
+          maxActive: 1000
+          initialSize: 5
+          minIdle: 5
+          maxWait: 50000
         max-pool-size: 20
         borrow-connection-timeout: 1000
       connectionfactory:
@@ -31,6 +35,11 @@ hsweb:
               url: jdbc:h2:mem:test;DB_CLOSE_ON_EXIT=FALSE
               username: sa
               password:
+              filters: stat
+              maxActive: 1000
+              initialSize: 5
+              minIdle: 5
+              maxWait: 50000
             max-pool-size: 20
             borrow-connection-timeout: 1000
         test_ds2: