From b826dec8b45abc89abc3e00519cb69713d0fad7d Mon Sep 17 00:00:00 2001 From: Silliter Date: Thu, 16 May 2019 17:16:30 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=BC=80=E5=8F=91=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=BE=AE=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/apiservice/controller/base/WhiteController.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index 11c8e99..19e045c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -10,6 +10,7 @@ import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -30,6 +31,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -303,4 +305,17 @@ public class WhiteController extends CoreBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @PostMapping(value = "/sys-find-user/list") + @ApiOperation(value = "查询用户列表信息",notes = "查询用户列表信息") + public ResultBean findSysUserInfoList(UserDetailModel model){ + try { + List userList = personnelService.querySysUserByUserDetailModelOrIds(model, new ArrayList<>()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(userList); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } From 561f28b06fae24ff9a84243e52d8075535e36604 Mon Sep 17 00:00:00 2001 From: Silliter Date: Thu, 16 May 2019 17:35:09 +0800 Subject: [PATCH 2/6] =?UTF-8?q?pom=E6=96=87=E4=BB=B6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pom.xml b/pom.xml index 636c3f8..6bbb5aa 100644 --- a/pom.xml +++ b/pom.xml @@ -100,6 +100,13 @@ i3plus-platform-common ${project.version} + + + i3plus.platform + i3plus-platform-plugin + ${project.version} + + i3plus.pojo i3plus-pojo-platform From 3fb40186264f8e74caa3626271d5062f3ff205c9 Mon Sep 17 00:00:00 2001 From: alwaysfrin <39822157+alwaysfrin@users.noreply.github.com> Date: Sun, 19 May 2019 17:57:40 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BA=8B=E5=8A=A1=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=8F=8Ademo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/base/ISystemInitService.java | 8 +- .../core/api/iservice/busi/ITestService.java | 5 + .../core/api/iservice/busi/ITestTransService.java | 108 +++++- .../configuration/AppStartSystemInit.java | 2 +- .../controller/DemoTransactionController.java | 361 ++++++++++++++++++- .../controller/base/WhiteController.java | 2 +- .../controller/busi/SysConfigController.java | 8 +- .../busi/SysLocaleLanguageController.java | 4 +- .../busi/SysLocaleResourceController.java | 4 +- .../serviceimpl/base/SystemInitService.java | 14 +- .../apiservice/serviceimpl/busi/TestService.java | 18 + .../serviceimpl/busi/TestTransService.java | 391 ++++++++++++++++++++- .../src/main/resources/application-dev.properties | 8 +- 13 files changed, 894 insertions(+), 39 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java index 5615d16..381f6e5 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java @@ -16,25 +16,25 @@ public interface ISystemInitService { * 系统初始化加载 */ @ApiOperation(value = "初始化加载所有数据",notes = "初始化加载所有数据") - void loadAll(); + void putAndLoadAll(); /** * 加载系统配置 */ @ApiOperation(value = "加载系统配置",notes = "加载系统配置") - void loadSysConfig(); + void putAndLoadSysConfig(); /** * 加载系统字典 */ @ApiOperation(value = "加载字典数据",notes = "加载字典数据") - void loadSysDictionary(); + void putAndLoadSysDictionary(); /** * 加载系统语言信息 */ @ApiOperation(value = "加载语言数据",notes = "加载语言数据") - void loadSysLocaleLanguage(); + void putAndLoadSysLocaleLanguage(); /** * 从缓存获取对象数据 diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java index e48c209..7d4bc9a 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.platform.bean.SysUser; import io.swagger.annotations.ApiOperation; +import javax.transaction.Transactional; import java.util.List; /** @@ -25,4 +26,8 @@ public interface ITestService { @ApiOperation(value = "in条件封装查询") List querySysUserByPack(DdlPackBean packBean); + + @ApiOperation(value = "读写分离测试写") + @Transactional + void write(); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestTransService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestTransService.java index f27306b..3d652cc 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestTransService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestTransService.java @@ -1,6 +1,11 @@ package cn.estsh.i3plus.core.api.iservice.busi; +import cn.estsh.i3plus.pojo.platform.bean.TestTransUser; import io.swagger.annotations.ApiOperation; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; /** * @Description : @@ -15,5 +20,106 @@ public interface ITestTransService { void testListTran(int type,String name); @ApiOperation(value = "自定义dao混用") - void testListTranSec(int type,String name); + void testTran(); + + /******************** 读写分离部分测试 **********************/ + + @ApiOperation(value = "读写分离测试读") + @Transactional + List listRead(); + + @ApiOperation(value = "读写分离测试写") + @Transactional + void write(); + + @ApiOperation(value = "读写分离测试读写-写事务") + void transReadWrite(); + + @ApiOperation(value = "读写分离测试读写-读事务") + void readWrite(); + + /******************** 事务机制部分demo **********************/ + + //@ApiOperation(value = "开始事务,执行过程中休眠seconds秒") + //void readTransTest(int seconds); + + //void testListTranSec(int type,String name); + + @ApiOperation(value = "更新对象") + void updateTestTransUser(String name, double salary); + + @ApiOperation(value = "新增对象") + void insertTestTransUser(String name,double salary); + + /** + * type == 1 按主键删除 + * type == 2 按name删除 + */ + @ApiOperation(value = "删除对象") + void deleteTestTransUser(String name); + + + + @ApiOperation(value = "第一类丢失更新") + void updateLost(String name, int time, boolean execp); + + @ApiOperation(value = "第二类丢失更新") + void updateLostTrans(String name,double salary, int time, boolean execp); + + @ApiOperation(value = "脏读模拟A") + void writeDirtyA(long id); + + @ApiOperation(value = "脏读模拟B") + void writeDirtyB(long id); + + @ApiOperation(value = "不可重复读A") + void writeRepeatA(long id); + + @ApiOperation(value = "不可重复读B") + void writeRepeatB(long id); + + @ApiOperation(value = "幻读模拟A") + void writePhantomA(long id,boolean listOrDelete); + + @ApiOperation(value = "幻读模拟B") + void writePhantomB(); + + @ApiOperation(value = "创建新事务") + void writeRequireNew(); + + @ApiOperation(value = "创建新事务-子方法") + void writeRequireNewMore(); + + @ApiOperation(value = "没有事务抛出异常") + void writeTransMandatory(); + + @ApiOperation(value = "没有事务抛出异常-子方法") + void writeTransMandatoryMore(); + + @ApiOperation(value = "乐观锁 Optimistic lockA") + void writeOptimisticA(long id,int type); + + @ApiOperation(value = "乐观锁 Optimistic lockB") + void writeOptimisticB(long id,int type); + + @ApiOperation(value = "悲观锁 pessimistic lockA") + void writePessimisticA(long id,int type); + + @ApiOperation(value = "悲观锁 pessimistic lockB") + void writePessimisticB(long id,int type); + + @ApiOperation(value = "常见事务处理-可能出现并发问题") + void writePatternWrong(long id,double salary); + + @ApiOperation(value = "事务模式-线程锁") + void writePatternSynchron(long id,double salary); + + @ApiOperation(value = "事务模式-乐观锁") + void writePatternOpti(long id,double salary); + + @ApiOperation(value = "事务模式-悲观锁") + void writePatternPessi(long id,double salary); + + @ApiOperation(value = "属性更新") + void writePatternParamUpdate(long id,double salary); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java index ac9179e..4586d42 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/AppStartSystemInit.java @@ -42,7 +42,7 @@ public class AppStartSystemInit implements CommandLineRunner { packIMPPResources(); LOGGER.info("【IMPP-Core开始加载基础信息...】"); - systemInitService.loadAll(); + systemInitService.putAndLoadAll(); } /** diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTransactionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTransactionController.java index df9197c..3098ba1 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTransactionController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTransactionController.java @@ -1,18 +1,27 @@ package cn.estsh.i3plus.core.apiservice.controller; +import cn.estsh.i3plus.core.api.iservice.busi.ITestService; import cn.estsh.i3plus.core.api.iservice.busi.ITestTransService; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.platform.bean.TestTransUser; import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.datasource.DataSourceConfig; +import cn.estsh.impp.framework.boot.datasource.DynamicDataSourceHolder; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.persistence.LockModeType; +import java.util.List; + /** * @Description : 对事务以及entityManager的操作演示 * @Reference : @@ -22,13 +31,16 @@ import org.springframework.web.bind.annotation.RestController; **/ @RestController @Api(description = "对事务以及entityManager的操作演示") -@RequestMapping(PlatformConstWords.BASE_URL + "/demo-trans") +@RequestMapping("/demo-trans") public class DemoTransactionController extends CoreBaseController { private static final Logger LOGGER = LoggerFactory.getLogger(DemoTransactionController.class); @Autowired private ITestTransService transService; + @Autowired + private ITestService testService; + /** * dao混合调用 * @@ -45,17 +57,350 @@ public class DemoTransactionController extends CoreBaseController { } /** - * dao混合调用2 + * 测试多数据源切换 * - * @param type 调用参数 - * @param name 名称 * @return 处理结果 */ - @PostMapping("/test2") - @ApiOperation(value = "dao混合调用2") - public ResultBean transTest2(int type, String name) { - transService.testListTranSec(type, name); + @PostMapping("/test-dynamic-datasource") + @ApiOperation(value = "测试多数据源切换") + public ResultBean testDynamicDataSource(int type) { + //多服务调用 + startMultiService(); + + if(type == 1){ + System.out.println("====先查后插入===="); + List uList = transService.listRead(); + System.out.println("对象总数:" + uList.size()); + + System.out.println("开始插入"); + transService.write(); + + uList = transService.listRead(); + System.out.println("再次查询:" + uList.size()); + }else if(type == 2){ + System.out.println("====先插入后查===="); + System.out.println("开始插入"); + transService.write(); + + List uList = transService.listRead(); + System.out.println("对象总数:" + uList.size()); + + if(uList.size() > 0){ + throw new RuntimeException("111"); + } + }else if(type == 3){ + System.out.println("====先查后插入===="); + List uList = transService.listRead(); + System.out.println("对象总数:" + uList.size()); + + System.out.println("开始插入"); + testService.write(); + + uList = transService.listRead(); + System.out.println("再次查询:" + uList.size()); + } return ResultBean.success("测试成功"); } + + + /** + * 测试多数据源切换(Controller调用) + * + * @return 处理结果 + */ + @PostMapping("/test-dynamic-datasource-more") + @ApiOperation(value = "测试多数据源切换") + public ResultBean testDynamicDataSourceWithController(boolean withMulti) { + if(withMulti) { + //多服务调用 + startMultiService(); + } + + //读 + readWriteTransactionTest(1); + //写 + readWriteTransactionTest(2); + + return ResultBean.success("测试成功"); + } + + /** + * 读写分离-事务测试 + * @return 处理结果 + */ + @PostMapping("/read-write-test") + @ApiOperation(value = "读写分离-事务测试") + public ResultBean readWriteTransactionTest(@RequestParam("testType") int testType) { + if(testType == 1) { + //读 + List uList = transService.listRead(); + System.out.println("对象总数:" + uList.size()); + for (TestTransUser u : uList){ + System.out.println(u); + } + }else if(testType == 2) { + //写 + transService.write(); + }else if(testType == 3) { + //读写(写事务) + transService.transReadWrite(); + }else if(testType == 4) { + //读写(写事务) + transService.readWrite(); + } + + return ResultBean.success("测试成功"); + } + + /******************* 事务并发出现的问题*******************/ + + /** + * 第一类丢失更新 + * @param name 更新的name的值 + * @param time 停止时间,秒 + * @param execp 是否抛出异常 + * @return 处理结果 + */ + @PostMapping("/update-lost") + @ApiOperation(value = "第一类丢失更新") + public ResultBean updateLost1(String name,int time,boolean execp) { + transService.updateLost(name,time,execp); + + return ResultBean.success("幻读模拟结束"); + } + + /** + * 第二类丢失更新 + * @return 处理结果 + */ + @PostMapping("/update-lost-trans") + @ApiOperation(value = "第二类丢失更新") + public ResultBean updateLostTrans(String name,double salary,int time,boolean execp) { + transService.updateLostTrans(name,salary,time,execp); + + return ResultBean.success("第二类丢失更新结束"); + } + + /** + * 模拟脏读 + * @return 处理结果 + */ + @PostMapping("/trans-dirty-a") + @ApiOperation(value = "脏读模拟A") + public ResultBean transDirtyA(long id) { + try{ + transService.writeDirtyA(id); + }catch(Exception e){ + System.out.println(e.getMessage()); + } + + return ResultBean.success("脏读模拟A结束"); + } + + /** + * 模拟脏读 + * @return 处理结果 + */ + @PostMapping("/trans-dirty-b") + @ApiOperation(value = "脏读模拟B") + public ResultBean transDirtyB(long id) { + transService.writeDirtyB(id); + + return ResultBean.success("脏读模拟B结束"); + } + + /** + * 模拟不可重复读A + * @return 处理结果 + */ + @PostMapping("/trans-repeat-a") + @ApiOperation(value = "不可重复读A") + public ResultBean transRepeatA(long id) { + transService.writeRepeatA(id); + + return ResultBean.success("不可重复读A结束"); + } + + /** + * 模拟不可重复读B + * @return 处理结果 + */ + @PostMapping("/trans-repeat-b") + @ApiOperation(value = "不可重复读B") + public ResultBean transRepeatB(long id) { + transService.writeRepeatB(id); + + return ResultBean.success("不可重复读B结束"); + } + + /** + * 模拟幻读 + * @return 处理结果 + */ + @PostMapping("/trans-phantom-a") + @ApiOperation(value = "幻读模拟A") + public ResultBean transPhantomA(long id,boolean listOrDelete) { + try { + transService.writePhantomA(id, listOrDelete); + }catch(Exception e){ + System.out.println("幻读异常:" + e.getMessage()); + } + + return ResultBean.success("幻读模拟A结束"); + } + + /** + * 模拟幻读 + * @return 处理结果 + */ + @PostMapping("/trans-phantom-b") + @ApiOperation(value = "幻读模拟B") + public ResultBean transPhantomB() { + transService.writePhantomB(); + + return ResultBean.success("幻读模拟B结束"); + } + + /********************* 事务传播 *******************/ + + /** + * 事务传播-创建新事物 + * @return 处理结果 + */ + @PostMapping("/trans-require-new") + @ApiOperation(value = "创建新事务") + public ResultBean transRequireNew() { + transService.writeRequireNew(); + + return ResultBean.success("require-new结束"); + } + + /** + * 事务传播-mandatory + * @return 处理结果 + */ + @PostMapping("/trans-mandatory") + @ApiOperation(value = "没有事务抛出异常") + public ResultBean transMandatory() { + transService.writeTransMandatory(); + + return ResultBean.success("mandatory结束"); + } + + /******************* 事务隔离级别 *******************/ + //调用事务出现的问题,打开事务注释 + + /********************* 乐观锁 Optimistic lock *******************/ + + /** + * 乐观锁A + * @return 处理结果 + */ + @PostMapping("/trans-optimistic-a") + @ApiOperation(value = "乐观锁 Optimistic lockA") + public ResultBean transOptimisticA(long id,int type) { + transService.writeOptimisticA(id,type); + + return ResultBean.success("乐观锁 Optimistic lockA结束"); + } + + /** + * 乐观锁B + * @return 处理结果 + */ + @PostMapping("/trans-optimistic-b") + @ApiOperation(value = "乐观锁 Optimistic lockB") + public ResultBean transOptimisticB(long id,int type) { + transService.writeOptimisticB(id,type); + + return ResultBean.success("乐观锁 Optimistic lockB结束"); + } + + /********************* 悲观锁 Pessimistic Lock *******************/ + /** + * 悲观锁A + * @return 处理结果 + */ + @PostMapping("/trans-pessimistic-a") + @ApiOperation(value = "悲观锁 pessimistic lockA") + public ResultBean transPessimisticA(long id,int type) { + transService.writePessimisticA(id,type); + + return ResultBean.success("悲观锁 pessimistic lockA结束"); + } + + /** + * 悲观锁B + * @return 处理结果 + */ + @PostMapping("/trans-pessimistic-b") + @ApiOperation(value = "悲观锁 pessimistic lockB") + public ResultBean transPessimisticB(long id,int type) { + transService.writePessimisticB(id,type); + + return ResultBean.success("悲观锁 pessimistic lockB结束"); + } + + /********************* 事务设计 *******************/ + + /** + * 通常(可能出现问题) + * @return 处理结果 + */ + @PostMapping("/trans-pattern-wrong") + @ApiOperation(value = "常见事务处理(可能出现并发问题)") + public ResultBean transPatternWrong(long id,double salary) { + transService.writePatternWrong(id,salary); + + return ResultBean.success("常见事务处理"); + } + + /** + * 线程锁(性能) + * @return 处理结果 + */ + @PostMapping("/trans-pattern-synchronized") + @ApiOperation(value = "事务模式-线程锁") + public ResultBean transPatternSynchron(long id,double salary) { + transService.writePatternSynchron(id,salary); + + return ResultBean.success("事务模式-线程锁"); + } + + /** + * 乐观锁 + * @return 处理结果 + */ + @PostMapping("/trans-pattern-opti") + @ApiOperation(value = "事务模式-乐观锁") + public ResultBean transPatternOpti(long id,double salary) { + transService.writePatternOpti(id,salary); + + return ResultBean.success("事务模式-乐观锁"); + } + + /** + * 悲观锁 + * @return 处理结果 + */ + @PostMapping("/trans-pattern-pessi") + @ApiOperation(value = "事务模式-悲观锁") + public ResultBean transPatternPessi(long id,double salary) { + transService.writePatternPessi(id,salary); + + return ResultBean.success("事务模式-悲观锁"); + } + + /** + * 属性更新 + * @return 处理结果 + */ + @PostMapping("/trans-pattern-param-update") + @ApiOperation(value = "事务模式-属性更新") + public ResultBean transPatternParamUpdate(long id,double salary) { + transService.writePatternParamUpdate(id,salary); + + return ResultBean.success("事务模式-属性更新"); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index 11c8e99..032bb1b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -219,7 +219,7 @@ public class WhiteController extends CoreBaseController { // 从缓存获取语言信息 Map resourceMap = redisRes.getHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE + languageCode); if (resourceMap == null || resourceMap.size() == 0) { - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); resourceMap = redisRes.getHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE + languageCode); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java index f46830c..ab5ac9e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java @@ -75,7 +75,7 @@ public class SysConfigController extends CoreBaseController { ConvertBean.modelInitialize(sysConfig,user); sysConfigService.insertSysConfig(sysConfig); - systemInitService.loadSysConfig(); + systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -105,7 +105,7 @@ public class SysConfigController extends CoreBaseController { } sysConfigService.deleteSysConfigById(Long.parseLong(idStr)); - systemInitService.loadSysConfig(); + systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -137,7 +137,7 @@ public class SysConfigController extends CoreBaseController { ConvertBean.modelUpdate(sysConfig,user); sysConfigService.updateSysConfig(sysConfig); - systemInitService.loadSysConfig(); + systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -268,7 +268,7 @@ public class SysConfigController extends CoreBaseController { ValidatorBean.checkNotNull(value,"值不能为空"); sysConfigService.updateSysConfigByCode(code,value); - systemInitService.loadSysConfig(); + systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java index b677d46..0dc2245 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java @@ -92,7 +92,7 @@ public class SysLocaleLanguageController extends CoreBaseController { sysLocaleLanguageService.updateSysLocaleLanguage(sysLocaleLanguage); // 重新加载资源 - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -210,7 +210,7 @@ public class SysLocaleLanguageController extends CoreBaseController { sysLocaleLanguageService.deleteSysLocaleLanguageByIds(StringTool.getArrayLong(idsStr)); // 重新加载语言资源 - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java index bca09f7..b8b7c38 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java @@ -198,7 +198,7 @@ public class SysLocaleResourceController extends CoreBaseController { sysLocaleResourceService.deleteSysLocaleResourceByIds(StringTool.getArrayLong(idsStr)); // 重新加载资源 - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); @@ -227,7 +227,7 @@ public class SysLocaleResourceController extends CoreBaseController { sysLocaleResourceService.insertSysLocaleResourceList(sysLocaleResourcesList); // 重新加载资源 - systemInitService.loadSysLocaleLanguage(); + systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); }catch(ImppBusiException busExcep){ return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java index 051833d..989e40f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java @@ -51,16 +51,16 @@ public class SystemInitService implements ISystemInitService { @Override @ApiOperation(value = "初始化加载所有数据",notes = "初始化加载所有数据") - public void loadAll() { + public void putAndLoadAll() { type = ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue(); - loadSysConfig(); - loadSysDictionary(); - loadSysLocaleLanguage(); + putAndLoadSysConfig(); + putAndLoadSysDictionary(); + putAndLoadSysLocaleLanguage(); } @Override @ApiOperation(value = "加载系统配置",notes = "加载系统配置") - public void loadSysConfig() { + public void putAndLoadSysConfig() { String redisKey = null; List list = configRDao.findAll(); for (SysConfig config : list) { @@ -74,7 +74,7 @@ public class SystemInitService implements ISystemInitService { @Override @ApiOperation(value = "加载字典数据",notes = "加载字典数据") - public void loadSysDictionary() { + public void putAndLoadSysDictionary() { try { List list = dictionaryRDao.findAll(); if(list != null && list.size() > 0){ @@ -99,7 +99,7 @@ public class SystemInitService implements ISystemInitService { @Override @ApiOperation(value = "加载语言数据",notes = "加载语言数据") - public void loadSysLocaleLanguage() { + public void putAndLoadSysLocaleLanguage() { // Redis 缓存 if(type == ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue()){ /** diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java index 40d5e4d..2175a9f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java @@ -13,7 +13,9 @@ import cn.estsh.i3plus.pojo.base.tool.HqlPack; import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.i3plus.pojo.platform.bean.TestTransUser; import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; +import cn.estsh.i3plus.pojo.platform.repository.TestTransUserRepository; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; @@ -24,6 +26,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * @Description : @@ -43,6 +46,9 @@ public class TestService implements ITestService { @Autowired private SysUserRepository sysUserRDao; + @Autowired + private TestTransUserRepository testTransUserRepository; + @Override @ApiOperation(value = "多表查询") public List queryToolAndToolType(Pager pager) { @@ -87,4 +93,16 @@ public class TestService implements ITestService { public List querySysUserByPack(DdlPackBean packBean) { return sysUserRDao.findByHqlWhere(packBean); } + + @Override + public void write() { + Random ran = new Random(10000); + TestTransUser u = new TestTransUser(); + u.setName("na2me" + ran.nextInt(100)); + u.setSalary(ran.nextDouble()); + System.out.println("插入对象:" + u); + + u = testTransUserRepository.insert(u); + System.out.println("插入对象:" + u); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTransService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTransService.java index b28f941..ba62cc6 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTransService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTransService.java @@ -3,18 +3,22 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ITestTransService; import cn.estsh.i3plus.core.apiservice.dao.ITestTransDao; import cn.estsh.i3plus.core.apiservice.dao.ITransDaoSec; -import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; -import cn.estsh.i3plus.pojo.platform.bean.SysTool; -import cn.estsh.i3plus.pojo.platform.bean.SysUser; -import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; +import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.i3plus.pojo.platform.repository.SysDepartmentRepository; import cn.estsh.i3plus.pojo.platform.repository.SysUserInfoRepository; import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; -import com.netflix.discovery.converters.Auto; +import cn.estsh.i3plus.pojo.platform.repository.TestTransUserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.repository.Lock; import org.springframework.stereotype.Service; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import javax.persistence.LockModeType; import java.util.List; +import java.util.Random; /** * @Description : @@ -41,6 +45,9 @@ public class TestTransService implements ITestTransService { @Autowired private ITransDaoSec testTransSecDao; + @Autowired + private TestTransUserRepository testTransUserRepository; + @Override public void testListTran(int type,String name) { if(type == 1) { @@ -130,8 +137,380 @@ public class TestTransService implements ITestTransService { } } + @Transactional(propagation=Propagation.NESTED,isolation=Isolation.DEFAULT,readOnly = false,rollbackFor = Exception.class) + @Lock(value = LockModeType.PESSIMISTIC_WRITE) + @Override + public void testTran() { + + } + + @Override + public List listRead() { + + List ul = testTransUserRepository.list(); + testTransUserRepository.flush(); + System.out.println("查询333数量:" + ul); + + return ul; + } + + @Override + public void write() { + Random ran = new Random(10000); + TestTransUser u = new TestTransUser(); + u.setName("na2me" + ran.nextInt(100)); + u.setSalary(ran.nextDouble()); + System.out.println("插入对象:" + u); + + u = testTransUserRepository.insert(u); + System.out.println("插入对象:" + u); + } + + @Override + public void transReadWrite() { + System.out.println("===写事务:查询后插入==="); + listRead(); + write(); + } + + @Override + public void readWrite() { + System.out.println("===读事务:查询后插入==="); + listRead(); + write(); + } + + @Override + public void updateTestTransUser(String name, double salary) { + TestTransUser u = testTransUserRepository.getByProperty("name",name); + u.setSalary(salary); + + testTransUserRepository.update(u); + } + + @Override + public void insertTestTransUser(String name, double salary) { + TestTransUser u = new TestTransUser(); + u.setName(name); + u.setSalary(salary); + + u = testTransUserRepository.insert(u); + System.out.println("插入对象:" + u); + } + + @Override + public void deleteTestTransUser(String name) { + testTransUserRepository.deleteByProperty("name",name); + } + + @Override + @Transactional(propagation = Propagation.NEVER) //没有事务 + public void updateLost(String name, int time, boolean execp) { + TestTransUser u = testTransUserRepository.getByProperty("name",name); + u.setSalary(u.getSalary() + 100); + + testTransUserRepository.update(u); + + if(time > 0){ + try { + Thread.sleep(time); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if(execp){ + throw new RuntimeException("手动异常"); + } + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //默认事务 + public void updateLostTrans(String name,double salary, int time, boolean execp) { + TestTransUser u = testTransUserRepository.getByProperty("name",name); + u.setSalary(salary); + + testTransUserRepository.update(u); + + if(time > 0){ + try { + Thread.sleep(time); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if(execp){ + throw new RuntimeException("手动异常"); + } + } + + @Override + public void writeDirtyA(long id) { + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("脏读开始,对象值:" + u.getSalary()); + u.setSalary(u.getSalary() + 666); + + testTransUserRepository.update(u); + System.out.println("脏读数据已更新:" + u.getSalary()); + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + if(u.getSalary() > 0){ + throw new RuntimeException("手动抛出,数据回滚。"); + } + } + + @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) + public void writeDirtyB(long id) { + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("第一次查询:" + u); + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + u = testTransUserRepository.getById(id); + System.out.println("第二次查询:" + u); + } + + @Override + public void writeRepeatA(long id) { + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("不可重复读开始,对象值:" + u.getSalary()); + u.setSalary(u.getSalary() + 666); + + testTransUserRepository.update(u); + System.out.println("不可重复读数据已更新:" + u.getSalary()); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("不可重复读已提交数据!"); + } + + @Override + public void writeRepeatB(long id) { + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("第一次查询:" + u); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + u = testTransUserRepository.getById(id); + System.out.println("第二次查询:" + u); + } + + @Override + //@Transactional(isolation = Isolation.SERIALIZABLE) + public void writePhantomA(long id,boolean listOrDelete) { + int count = testTransUserRepository.listCount(); + System.out.println("幻读开始,记录数量:" + count); + + if(listOrDelete){ + TestTransUser u = new TestTransUser(); + u.setName("testPhantom"); + u.setSalary(500d); + + u = testTransUserRepository.insert(u); + System.out.println("插入对象:" + u); + + u.setSalary(u.getSalary() * 10); + testTransUserRepository.update(u); + testTransUserRepository.flush(); + System.out.println("update对象:" + u); + }else{ + testTransUserRepository.deleteById(id); + } + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if(count > 0){ + throw new RuntimeException("幻读抛出异常"); + } + + count = testTransUserRepository.listCount(); + System.out.println("幻读结束,记录数量:" + count); + } + @Override - public void testListTranSec(int type,String name) { + @Transactional(isolation = Isolation.SERIALIZABLE) + public void writePhantomB() { + int count = testTransUserRepository.listCount(); + System.out.println("幻读另一个事务开始,记录数量:" + count); + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + count = testTransUserRepository.listCount(); + System.out.println("幻读另一个事务结束,记录数量:" + count); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) + public void writeRequireNew() { + int count = testTransUserRepository.listCount(); + System.out.println("插入前数量:" + count); + insertTestTransUser("require new",100); + + count = testTransUserRepository.listCount(); + System.out.println("插入后数量:" + count); + + TestTransUser u = testTransUserRepository.getByProperty("name","require new"); + System.out.println("查询对象:" + u); + + writeRequireNewMore(); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void writeRequireNewMore() { + int count = testTransUserRepository.listCount(); + System.out.println("【子事务】查询数量:" + count); + + TestTransUser u = testTransUserRepository.getByProperty("name","require new"); + System.out.println("【子事务】查询对象:" + u); + } + + @Override + @Transactional(propagation = Propagation.NEVER) + public void writeTransMandatory() { + int count = testTransUserRepository.listCount(); + System.out.println("数量:" + count); + + writeTransMandatoryMore(); + } + + @Override + @Transactional(propagation = Propagation.MANDATORY) + public void writeTransMandatoryMore() { + int count = testTransUserRepository.listCount(); + System.out.println("【子事务】查询数量:" + count); + } + + @Override + //@Transactional(isolation=Isolation.REPEATABLE_READ) + //@Lock(value = LockModeType.WRITE) + public void writeOptimisticA(long id,int type) { + if(type == 1){ + //脏读 + writeDirtyA(id); + }else if(type == 2){ + writeRepeatA(id); + }else if(type == 3){ + writePhantomA(id,true); + } + } + + @Override + public void writeOptimisticB(long id,int type) { + if(type == 1){ + //脏读 + writeDirtyB(id); + }else if(type == 2){ + writeRepeatB(id); + }else if(type == 3){ + writePhantomB(); + } + } + + @Override + //@Transactional(isolation=Isolation.REPEATABLE_READ) + //@Lock(value = LockModeType.PESSIMISTIC_WRITE) + public void writePessimisticA(long id,int type) { + if(type == 1){ + //脏读 + writeDirtyA(id); + }else if(type == 2){ + writeRepeatA(id); + }else if(type == 3){ + writePhantomA(id,true); + } + } + + @Override + public void writePessimisticB(long id,int type) { + if(type == 1){ + //脏读 + writeDirtyB(id); + }else if(type == 2){ + writeRepeatB(id); + }else if(type == 3){ + writePhantomB(); + } + } + + @Override + public void writePatternWrong(long id,double salary) { + System.out.println("==事务并发问题=="); + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("更新前:" + u.getName() + "," + u.getSalary()); + u.setSalary(salary); + System.out.println("更新后:" + u.getName() + "," + u.getSalary()); + + testTransUserRepository.update(u); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + @Override + public synchronized void writePatternSynchron(long id,double salary) { + System.out.println("==添加线程锁=="); + writePatternWrong(id,salary); + } + + @Override + public void writePatternOpti(long id,double salary) { + System.out.println("==乐观锁=="); + + try { + writePatternWrong(id, salary); + }catch(Exception e){ + System.out.println("在此处进行再次处理"); + System.out.println("乐观锁抛出异常:" + e.getMessage()); + } + } + + @Override + public void writePatternPessi(long id,double salary) { + writePatternWrong(id, salary); + } + + @Override + public void writePatternParamUpdate(long id,double salary) { + System.out.println("==通过更新属性值保证事务=="); + + TestTransUser u = testTransUserRepository.getById(id); + System.out.println("更新前:" + u.getName() + "," + u.getSalary()); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + //update TestTransUser set salary = salary + :salary where name=:name; + testTransUserRepository.updateByPropertiesWithVal("id",id,"salary",salary); + System.out.println("5秒后更新:" + u.getName() + "," + u.getSalary()); } } diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index e9668be..9666fb2 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -58,15 +58,17 @@ spring.datasource.time-between-eviction-runs-millis=18800 ##主数据源,读写 #impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver -impp.write.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.write.datasource.jdbc-url=jdbc:mysql://192.168.1.60:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.write.datasource.jdbc-url=jdbc:mysql://192.168.1.44:3306/40_impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 impp.write.datasource.username=impp_i3_core_user impp.write.datasource.password=impp_i3_core_pwd ##辅数据源,只读 #impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver -impp.read.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 -impp.read.datasource.username=impp_i3_core_user +impp.read.datasource.jdbc-url=jdbc:mysql://192.168.1.60:3307/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.read.datasource.jdbc-url=jdbc:mysql://192.168.1.44:3306/40_impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.read.datasource.username=impp_i3_schedule_user_3307 impp.read.datasource.password=impp_i3_core_pwd ################ 日志数据源 ################ From 18b04a720eff52222345d89c18dc55dc45b71783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Mon, 20 May 2019 13:45:27 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E9=95=BF=E6=96=87=E6=9C=AC=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/busi/ITestService.java | 9 +++++ modules/i3plus-core-apiservice/pom.xml | 18 ++++++++++ .../controller/DemoDdlPackController.java | 39 ++++++++++++++++++++-- .../controller/busi/SysFileController.java | 2 +- .../apiservice/mq/MessageLetterQueueReceiver.java | 3 ++ .../core/apiservice/mq/ScheduleQueueReceiver.java | 4 +++ .../apiservice/serviceimpl/busi/TestService.java | 15 +++++++++ pom.xml | 22 ++++++++++++ 8 files changed, 108 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java index e48c209..9e1651f 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ITestService.java @@ -25,4 +25,13 @@ public interface ITestService { @ApiOperation(value = "in条件封装查询") List querySysUserByPack(DdlPackBean packBean); + + @ApiOperation(value = "添加用户") + void insertSysUser(SysUser sysUser); + + @ApiOperation(value = "修改用户") + void updateSysUser(SysUser sysUser); + + @ApiOperation(value = "查询用户") + List listSysUser(); } diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 3e4de62..9c4153e 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -77,17 +77,35 @@ mysql-connector-java + + com.oracle + ojdbc6 + + org.apache.tomcat.embed tomcat-embed-jasper + org.apache.commons commons-lang3 + + + com.microsoft.sqlserver + sqljdbc4 + + + + + org.postgresql + postgresql + + org.apache.shiro diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoDdlPackController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoDdlPackController.java index a9890a1..dc2c3b6 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoDdlPackController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoDdlPackController.java @@ -15,9 +15,7 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; @@ -101,4 +99,39 @@ public class DemoDdlPackController { ListPager listPager = testService.querySysUserByPager(user,pager); return ResultBean.success("操作成功").setListPager(listPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } + + /** + * 测试添加长文本数据 + * @param sysUser + * @return + */ + @PostMapping(value="/test-insert") + @ApiOperation(value="测试添加长文本数据") + public BaseResultBean testInsertSysUserLob(SysUser sysUser){ + testService.insertSysUser(sysUser); + return ResultBean.success("操作成功").setResultObject(sysUser).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + /** + * 测试添加长文本数据 + * @param sysUser + * @return + */ + @PutMapping(value="/test-update") + @ApiOperation(value="测试添加长文本数据") + public BaseResultBean testUpdateSysUserLob(SysUser sysUser){ + testService.updateSysUser(sysUser); + return ResultBean.success("操作成功").setResultObject(sysUser).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + /** + * 测试查询长文本数据 + * @return + */ + @PutMapping(value="/test-list") + @ApiOperation(value="测试添加长文本数据") + public BaseResultBean testListSysUserLob(){ + List sysUserList = testService.listSysUser(); + return ResultBean.success("操作成功").setResultList(sysUserList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java index 737944a..cc44e9d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java @@ -132,7 +132,7 @@ public class SysFileController extends CoreBaseController{ @ApiOperation(value = "根据id查询文件资源", notes = "根据id查询文件资源") public ResultBean getSysFileById(@PathVariable("id") String id){ try { - ValidatorBean.checkIsNumber(id, "id必须为数字"); + ValidatorBean.checkIsNumber(id, "id必须为数字[" + id + "]"); SysFile sysFile = sysFileService.getSysFileById(Long.parseLong(id)); ValidatorBean.checkNotNull(sysFile, "文件信息不存在"); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java index 2d5d5e2..6a8720d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageLetterQueueReceiver.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; import cn.estsh.i3plus.core.apiservice.websocket.MessageWebSocket; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -68,6 +69,7 @@ public class MessageLetterQueueReceiver { LOGGER.info("【MQ-{}】 数据接收成功:{}", PlatformConstWords.IMPP_MESSAGE_LETTER_QUEUE, data); SysMessage msg = JsonUtilTool.decode(data, SysMessage.class); try { + ConvertBean.serviceModelInitialize(msg, "system"); msg = sysMessageService.insertSysMessage(msg); if (!StringUtils.isBlank(msg.getMessageReceiversId())) { @@ -92,6 +94,7 @@ public class MessageLetterQueueReceiver { refUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); refUserMessage.setReceiverTime(TimeTool.getNowTime(true)); refUserMessage.setIsUrgent(msg.getIsUrgent()); + ConvertBean.serviceModelInitialize(refUserMessage, "system"); insertList.add(refUserMessage); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/ScheduleQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/ScheduleQueueReceiver.java index 273a919..cd8ec35 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/ScheduleQueueReceiver.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/ScheduleQueueReceiver.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.apiservice.mq; import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskPlanService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -73,6 +74,7 @@ public class ScheduleQueueReceiver { logTaskTime.setTaskSoftTypeRdd(taskPlan.getTaskSoftTypeRdd()); logTaskTime.setTaskCycleNameRdd(taskPlan.getTaskCycleNameRdd()); logTaskTime.setTaskCycleExpsRdd(taskPlan.getTaskCycleExpsRdd()); + ConvertBean.serviceModelInitialize(logTaskTime, "system"); sysTaskPlanService.logInsertSysLogTaskTime(logTaskTime); // 定时任务失败通知 @@ -91,6 +93,8 @@ public class ScheduleQueueReceiver { sysMessage.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getValue()); sysMessage.setMessageSendTime(TimeTool.getNowTime(true)); sysMessage.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + // 初始数据 + ConvertBean.serviceModelInitialize(sysMessage, "system"); // 是否内部成员 if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == taskPlan.getIsInternalUser()) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java index 40d5e4d..af80f07 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestService.java @@ -87,4 +87,19 @@ public class TestService implements ITestService { public List querySysUserByPack(DdlPackBean packBean) { return sysUserRDao.findByHqlWhere(packBean); } + + @Override + public void insertSysUser(SysUser sysUser) { + sysUserRDao.insert(sysUser); + } + + @Override + public void updateSysUser(SysUser sysUser) { + sysUserRDao.update(sysUser); + } + + @Override + public List listSysUser() { + return sysUserRDao.list(); + } } diff --git a/pom.xml b/pom.xml index 636c3f8..12a5500 100644 --- a/pom.xml +++ b/pom.xml @@ -136,6 +136,28 @@ 5.1.39 + + + com.oracle + ojdbc6 + 12.1.0.1.0 + + + + + com.microsoft.sqlserver + sqljdbc4 + 4.0 + + + + + org.postgresql + postgresql + 42.2.5 + + + org.apache.commons From 739524b3f6a63c8830c3665a9bfc29ab4e597d20 Mon Sep 17 00:00:00 2001 From: Silliter Date: Mon, 20 May 2019 18:17:55 +0800 Subject: [PATCH 5/6] =?UTF-8?q?docker=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-docker.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-docker.properties b/modules/i3plus-core-apiservice/src/main/resources/application-docker.properties index 8856ec8..7210ea7 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-docker.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-docker.properties @@ -106,9 +106,9 @@ impp.schedule.thread-priority=5 ################################ 其他功能设置 ################################ #redisIP -redis.hostName=192.168.1.55 +redis.hostName=redis #端口号 -redis.port=16376 +redis.port=6379 #如果有密码 redis.password= ##其他redis配置需要调整的加在此处 @@ -167,9 +167,9 @@ spring.sleuth.sampler.probability=1.0 ################ FastDfs 配置 ################ #tracker服务器ip -fastdfs.tracker_servers=tracker:7031 +fastdfs.tracker_servers=tracker:22122 # tracker的http端口 -fastdfs.http_tracker_http_port=7031 +fastdfs.http_tracker_http_port=22122 # 使用自定义工具获取文件展示地址 fastdfs.http.ui.host=http://192.168.1.56:7030 #密码 From 18e0d0d60a29cdf0a47ce63c44bdce83548e1b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Tue, 21 May 2019 09:22:50 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E8=AF=BB=E5=86=99=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java | 2 +- .../estsh/i3plus/core/apiservice/controller/base/WhiteController.java | 2 +- .../core/apiservice/controller/busi/SysOrderNoRuleController.java | 4 ++-- .../core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java index 4f651c2..a177138 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java @@ -61,7 +61,7 @@ public interface ISysOrderNoRuleService { * @return 单号信息 */ @ApiOperation(value = "根据code查询最新单号规则") - SysOrderNoRule getSysOrderNoRuleCode(String code); + SysOrderNoRule doGetSysOrderNoRuleCode(String code); /** * 根据id修改单号规则状态 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index c0f7633..3fd60fb 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -303,7 +303,7 @@ public class WhiteController extends CoreBaseController { try { ValidatorBean.checkNotNull(code, "code不能为空"); - SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.getSysOrderNoRuleCode(code); + SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.doGetSysOrderNoRuleCode(code); return ResultBean.success("操作成功").setResultObject(sysOrderNoRule).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java index 90df351..b9a4709 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java @@ -383,7 +383,7 @@ public class SysOrderNoRuleController extends CoreBaseController { try { ValidatorBean.checkNotNull(code, "code不能为空"); - SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.getSysOrderNoRuleCode(code); + SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.doGetSysOrderNoRuleCode(code); return ResultBean.success("操作成功").setResultObject(sysOrderNoRule).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -407,7 +407,7 @@ public class SysOrderNoRuleController extends CoreBaseController { List orderNoList = new ArrayList<>(); for (int i = 0; i < num; i++) { - orderNoList.add(sysOrderNoRuleService.getSysOrderNoRuleCode(code).getOrderNo()); + orderNoList.add(sysOrderNoRuleService.doGetSysOrderNoRuleCode(code).getOrderNo()); } return ResultBean.success("操作成功").setResultList(orderNoList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java index ffc051a..274cd74 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java @@ -89,7 +89,7 @@ public class SysOrderNoRuleService implements ISysOrderNoRuleService { @Override @ApiOperation(value = "根据code查询最新单号规则") - public synchronized SysOrderNoRule getSysOrderNoRuleCode(String code) { + public synchronized SysOrderNoRule doGetSysOrderNoRuleCode(String code) { SysOrderNoRule sysOrderNoRule = sysOrderNoRuleRDao.getByProperty("orderNoRuleCode", code); if (sysOrderNoRule == null) {