From b5fd64307067ae6ea103f731fc7a5cd91fe6e817 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Sun, 7 Jul 2019 00:48:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=8B=E5=8A=A1=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/config/jeesite-core.yml | 5 ++-- .../modules/test/service/TestDataService.java | 27 +++++++++++++++++++ .../modules/test/web/TestDataController.java | 16 +++++++++++ web/src/main/resources/config/application.yml | 5 ++-- .../views/modules/test/testDataList.html | 10 ++++++- .../com/jeesite/test/MultiDataSourceTest.java | 11 +++++--- web/src/test/java/com/jeesite/test/Test.java | 9 ------- 7 files changed, 65 insertions(+), 18 deletions(-) delete mode 100644 web/src/test/java/com/jeesite/test/Test.java diff --git a/modules/core/src/main/resources/config/jeesite-core.yml b/modules/core/src/main/resources/config/jeesite-core.yml index 3a3bfec9..41c43ca6 100644 --- a/modules/core/src/main/resources/config/jeesite-core.yml +++ b/modules/core/src/main/resources/config/jeesite-core.yml @@ -41,15 +41,16 @@ jdbc: maxEvictableIdleTimeMillis: 1800000 # 是否自动回收泄露的连接和超时时间,单位秒(35分钟)(4.0.6+) - removeAbandoned: true + removeAbandoned: false removeAbandonedTimeout: 2100 # Oracle 下会自动开启 PSCache,并指定每个连接上 PSCache 大小。若不指定,则与 maxActive 相同(4.1.5+) maxPoolPreparedStatementPerConnectionSize: ~ - # JTA 分布式事务(v4.0.4+) + # JTA 分布式事务,建议启用多数据源的时候开启(v4.0.4+) jta: enabled: false + # 注意:如果报 oracle.jdbc.xa.OracleXAResource.recover 错误,则需要授权如下: # grant select on sys.dba_pending_transactions to jeesite; # grant select on sys.pending_trans$ to jeesite; diff --git a/web/src/main/java/com/jeesite/modules/test/service/TestDataService.java b/web/src/main/java/com/jeesite/modules/test/service/TestDataService.java index bd89bada..c995d686 100644 --- a/web/src/main/java/com/jeesite/modules/test/service/TestDataService.java +++ b/web/src/main/java/com/jeesite/modules/test/service/TestDataService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jeesite.common.entity.Page; +import com.jeesite.common.idgen.IdGen; import com.jeesite.common.lang.DateUtils; import com.jeesite.common.service.CrudService; import com.jeesite.modules.file.utils.FileUploadUtils; @@ -126,4 +127,30 @@ public class TestDataService extends CrudService { + ", l: " + l + ", f: " + f + ", d: " + d + ", s: " + s); } + /** + * 事务测试,若 Child 报错,则回滚 + */ + @Transactional(readOnly=false/*, propagation=Propagation.NOT_SUPPORTED*/) + public void transTest(TestData testData) { + testData.setTestInput("transTest"); + testData.setTestTextarea(IdGen.randomBase62(5)); + dao.insert(testData); + TestDataChild testDataChild = new TestDataChild(); + testDataChild.setTestData(testData); + // 设置一个超出数据库范围的值,抛出数据库异常 + StringBuilder sb = new StringBuilder(); + for (int i=0; i<500; i++){ + sb.append("transTest" + i); + } + testDataChild.setTestInput(sb.toString()); + testDataChildDao.insert(testDataChild); + } + + /** + * 事务验证,返回空,则事务回滚成功 + */ + public boolean transValid(TestData testData) { + return dao.get(testData) == null; + } + } \ No newline at end of file diff --git a/web/src/main/java/com/jeesite/modules/test/web/TestDataController.java b/web/src/main/java/com/jeesite/modules/test/web/TestDataController.java index ecfbed5d..f8724fd1 100644 --- a/web/src/main/java/com/jeesite/modules/test/web/TestDataController.java +++ b/web/src/main/java/com/jeesite/modules/test/web/TestDataController.java @@ -120,4 +120,20 @@ public class TestDataController extends BaseController { return renderResult(Global.TRUE, text("删除数据成功!")); } + /** + * 事务测试 + */ + @RequiresPermissions("test:testData:edit") + @RequestMapping(value = "transTest") + @ResponseBody + public String transTest(TestData testData) { + try{ + testDataService.transTest(testData); + }catch (Exception e) { + logger.debug("事务测试信息,报错回滚:" + e.getMessage()); + } + boolean bl = testDataService.transValid(testData); + return renderResult(Global.TRUE, "事务测试"+(bl?"成功,数据已":"失败,数据未")+"回滚!"); + } + } \ No newline at end of file diff --git a/web/src/main/resources/config/application.yml b/web/src/main/resources/config/application.yml index 0c5bcde6..cf705e6e 100644 --- a/web/src/main/resources/config/application.yml +++ b/web/src/main/resources/config/application.yml @@ -99,7 +99,7 @@ jdbc: # maxEvictableIdleTimeMillis: 1800000 # # # 是否自动回收泄露的连接和超时时间,单位秒(35分钟)(4.0.6+) -# removeAbandoned: true +# removeAbandoned: false # removeAbandonedTimeout: 2100 # # # Oracle 下会自动开启 PSCache,并指定每个连接上 PSCache 大小。若不指定,则与 maxActive 相同(4.1.5+) @@ -124,9 +124,10 @@ jdbc: # minIdle: 3 # maxActive: 20 -# # JTA 分布式事务(v4.0.4+) +# # JTA 分布式事务,建议启用多数据源的时候开启(v4.0.4+) # jta: # enabled: false + # 注意:如果报 oracle.jdbc.xa.OracleXAResource.recover 错误,则需要授权如下: # grant select on sys.dba_pending_transactions to jeesite; # grant select on sys.pending_trans$ to jeesite; diff --git a/web/src/main/resources/views/modules/test/testDataList.html b/web/src/main/resources/views/modules/test/testDataList.html index b98e5237..af639a2c 100644 --- a/web/src/main/resources/views/modules/test/testDataList.html +++ b/web/src/main/resources/views/modules/test/testDataList.html @@ -10,6 +10,7 @@ <% if(hasPermi('test:testData:edit')){ %> ${text('新增')} <% } %> + 事务测试
@@ -175,5 +176,12 @@ $('#dataGrid').dataGrid({ // $("#dataGrid").parent().append("
没有符合数据
"); // } } -}); +}); +$("#btnTrunsTest").click(function(){ + js.ajaxSubmit("${ctx}/test/testData/transTest", function(data){ + js.showMessage(data.message); + page(); + }); + return false; +}); \ No newline at end of file diff --git a/web/src/test/java/com/jeesite/test/MultiDataSourceTest.java b/web/src/test/java/com/jeesite/test/MultiDataSourceTest.java index 1e8818dc..fadd7e09 100644 --- a/web/src/test/java/com/jeesite/test/MultiDataSourceTest.java +++ b/web/src/test/java/com/jeesite/test/MultiDataSourceTest.java @@ -22,7 +22,10 @@ import com.jeesite.modules.test.entity.TestDataChild; import com.jeesite.modules.test.service.TestDataService; /** - * 多数据源并发测试,将 TestDataChildDao 的数据源设置为 ds2 + * 多数据源并发测试
+ * 1、将 TestDataChildDao 的数据源设置为 ds2
+ * 2、将 TestDataChild 的表名设置为 test_data_child2
+ * 3、配置 ds2 数据源,并创建 test_data_child2 表 * @author ThinkGem * @version 2019-6-26 */ @@ -47,12 +50,12 @@ public class MultiDataSourceTest extends BaseSpringContextTests { new TestDataChild(), new TestDataChild(), new TestDataChild())); testDataService.save(testData); List list = testDataService.findList(new TestData()); - System.out.println(list.size()); + System.out.println("size: " + list.size()); list.forEach(e -> { - System.out.println(testDataService.get(e)); + System.out.println("get: " + testDataService.get(e)); }); } catch (Exception e) { - e.printStackTrace(); + System.err.println(e.getMessage()); } finally { latch.countDown(); } diff --git a/web/src/test/java/com/jeesite/test/Test.java b/web/src/test/java/com/jeesite/test/Test.java deleted file mode 100644 index 9abcb8b9..00000000 --- a/web/src/test/java/com/jeesite/test/Test.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.jeesite.test; - -public class Test { - - public static void main(String[] args) { - - } - -}