Browse Source

最新版分库分表集成示例 nacos配置文件

zhangdaiscott 2 years ago
parent
commit
cf1eef7447

+ 32 - 28
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java

@@ -400,27 +400,18 @@ public class LoginController {
 	 * @return
 	 */
 	private Result<JSONObject> userInfo(SysUser sysUser, Result<JSONObject> result) {
-		String syspassword = sysUser.getPassword();
 		String username = sysUser.getUsername();
+		String syspassword = sysUser.getPassword();
 		// 获取用户部门信息
-		JSONObject obj = new JSONObject();
-		List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
-		obj.put("departs", departs);
-		if (departs == null || departs.size() == 0) {
-			obj.put("multi_depart", 0);
-		} else if (departs.size() == 1) {
-			sysUserService.updateUserDepart(username, departs.get(0).getOrgCode());
-			obj.put("multi_depart", 1);
-		} else {
-			//查询当前是否有登录部门
-			// update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去
-			SysUser sysUserById = sysUserService.getById(sysUser.getId());
-			if(oConvertUtils.isEmpty(sysUserById.getOrgCode())){
-				sysUserService.updateUserDepart(username, departs.get(0).getOrgCode());
-			}
-			// update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去
-			obj.put("multi_depart", 2);
-		}
+		JSONObject obj = new JSONObject(new LinkedHashMap<>());
+		
+		// 生成token
+		String token = JwtUtil.sign(username, syspassword);
+		// 设置token缓存有效时间
+		redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
+		redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
+		obj.put("token", token);
+
 		// update-begin--Author:sunjianlei Date:20210802 for:获取用户租户信息
 		String tenantIds = sysUser.getRelTenantIds();
 		if (oConvertUtils.isNotEmpty(tenantIds)) {
@@ -438,13 +429,26 @@ public class LoginController {
 			}
 		}
 		// update-end--Author:sunjianlei Date:20210802 for:获取用户租户信息
-		// 生成token
-		String token = JwtUtil.sign(username, syspassword);
-		// 设置token缓存有效时间
-		redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
-		redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
-		obj.put("token", token);
+		
 		obj.put("userInfo", sysUser);
+		
+		List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
+		obj.put("departs", departs);
+		if (departs == null || departs.size() == 0) {
+			obj.put("multi_depart", 0);
+		} else if (departs.size() == 1) {
+			sysUserService.updateUserDepart(username, departs.get(0).getOrgCode());
+			obj.put("multi_depart", 1);
+		} else {
+			//查询当前是否有登录部门
+			// update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去
+			SysUser sysUserById = sysUserService.getById(sysUser.getId());
+			if(oConvertUtils.isEmpty(sysUserById.getOrgCode())){
+				sysUserService.updateUserDepart(username, departs.get(0).getOrgCode());
+			}
+			// update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去
+			obj.put("multi_depart", 2);
+		}
 		obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
 		result.setResult(obj);
 		result.success("登录成功");
@@ -588,9 +592,9 @@ public class LoginController {
 		return Result.ok();
 	}
 	/**
-	 * 登录二维码
+	 * 获取登录二维码
 	 */
-	@ApiOperation(value = "登录二维码", notes = "登录二维码")
+	@ApiOperation(value = "获取登录二维码", notes = "获取登录二维码")
 	@GetMapping("/getLoginQrcode")
 	public Result<?>  getLoginQrcode() {
 		String qrcodeId = CommonConstant.LOGIN_QRCODE_PRE+IdWorker.getIdStr();
@@ -621,7 +625,7 @@ public class LoginController {
 	/**
 	 * 获取用户扫码后保存的token
 	 */
-	@ApiOperation(value = "获取用户扫码后保存的token", notes = "获取用户扫码后保存的token")
+	@ApiOperation(value = "获取用户扫码后Token", notes = "获取用户扫码后Token")
 	@GetMapping("/getQrcodeToken")
 	public Result getQrcodeToken(@RequestParam String qrcodeId) {
 		Object token = redisUtil.get(CommonConstant.LOGIN_QRCODE_TOKEN + qrcodeId);

+ 59 - 0
jeecg-boot/jeecg-cloud-module/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding-multi.yaml

@@ -0,0 +1,59 @@
+spring:
+  shardingsphere:
+    datasource:
+      names: ds0,ds1
+      ds0:
+        driverClassName: com.mysql.cj.jdbc.Driver
+        url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+        type: com.alibaba.druid.pool.DruidDataSource
+        username: root
+        password: root
+      ds1:
+        driverClassName: com.mysql.cj.jdbc.Driver
+        url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot2?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+        type: com.alibaba.druid.pool.DruidDataSource
+        username: root
+        password: root
+    props:
+      sql-show: true
+    rules:
+      replica-query:
+        load-balancers:
+          round-robin:
+            type: ROUND_ROBIN
+            props:
+              default: 0
+        data-sources:
+          prds:
+            primary-data-source-name: ds0
+            replica-data-source-names: ds1
+            load-balancer-name: round_robin
+      sharding:
+        binding-tables:
+          - sys_log
+        key-generators:
+          snowflake:
+            type: SNOWFLAKE
+            props:
+              worker-id: 123
+        sharding-algorithms:
+          table-classbased:
+            props:
+              strategy: standard
+              algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm
+            type: CLASS_BASED
+          database-inline:
+            type: INLINE
+            props:
+              algorithm-expression: ds$->{operate_type % 2}
+        tables:
+          sys_log:
+            actual-data-nodes: ds$->{0..1}.sys_log$->{0..1}
+            database-strategy:
+              standard:
+                sharding-column: operate_type
+                sharding-algorithm-name: database-inline
+            table-strategy:
+              standard:
+                sharding-algorithm-name: table-classbased
+                sharding-column: log_type

+ 33 - 0
jeecg-boot/jeecg-cloud-module/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding.yaml

@@ -0,0 +1,33 @@
+spring:
+  shardingsphere:
+    datasource:
+      names: ds0
+      ds0:
+        driverClassName: com.mysql.cj.jdbc.Driver
+        url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+        username: root
+        password: root
+        type: com.alibaba.druid.pool.DruidDataSource
+    props:
+      sql-show: true
+    rules:
+      sharding:
+        binding-tables: sys_log
+        key-generators:
+          snowflake:
+            type: SNOWFLAKE
+            props:
+              worker-id: 123
+        sharding-algorithms:
+          table-classbased:
+            props:
+              strategy: standard
+              algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm
+            type: CLASS_BASED
+        tables:
+          sys_log:
+            actual-data-nodes: ds0.sys_log$->{0..1}
+            table-strategy:
+              standard:
+                sharding-algorithm-name: table-classbased
+                sharding-column: log_type

+ 11 - 10
jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java

@@ -35,7 +35,8 @@ public class JeecgShardingDemoController extends JeecgController<ShardingSysLog,
     @PostMapping(value = "/test1")
     @ApiOperation(value = "单库分表插入", notes = "单库分表")
     public Result<?> add() {
-        int size=10;
+        log.info("---------------------------------单库分表插入--------------------------------");
+        int size = 10;
         for (int i = 0; i < size; i++) {
             ShardingSysLog shardingSysLog = new ShardingSysLog();
             shardingSysLog.setLogContent("jeecg");
@@ -43,7 +44,7 @@ public class JeecgShardingDemoController extends JeecgController<ShardingSysLog,
             shardingSysLog.setOperateType(i);
             shardingSysLogService.save(shardingSysLog);
         }
-        return Result.OK();
+        return Result.OK("单库分表插入10条数据完成!");
     }
 
     /**
@@ -57,30 +58,30 @@ public class JeecgShardingDemoController extends JeecgController<ShardingSysLog,
     }
 
     /**
-     * 库分表 - 插入
+     * 库分表 - 插入
      * @return
      */
     @PostMapping(value = "/test2")
-    @ApiOperation(value = "双库分表插入", notes = "双库分表")
+    @ApiOperation(value = "分库分表插入", notes = "分库分表")
     public Result<?> test2() {
         int start=20;
-        int size=30;
+        int size=50;
         for (int i = start; i <= size; i++) {
             ShardingSysLog shardingSysLog = new ShardingSysLog();
-            shardingSysLog.setLogContent("库分表测试");
-            shardingSysLog.setLogType(i);
+            shardingSysLog.setLogContent("库分表测试");
+            shardingSysLog.setLogType(0);
             shardingSysLog.setOperateType(i);
             shardingSysLogService.save(shardingSysLog);
         }
-        return Result.OK();
+        return Result.OK("分库分表插入10条数据完成!");
     }
 
     /**
-     * 库分表 - 查询
+     * 库分表 - 查询
      * @return
      */
     @PostMapping(value = "/list2")
-    @ApiOperation(value = "双库分表查询", notes = "双库分表")
+    @ApiOperation(value = "分库分表查询", notes = "分库分表")
     public Result<?> list2() {
         return Result.OK(shardingSysLogService.list());
     }

jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding2.yml → jeecg-boot/jeecg-cloud-module/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding-multi.yml


+ 1 - 1
jeecg-boot/jeecg-cloud-module/jeecg-system-cloud-start/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 server:
-  #微服务端口
   port: 7001
+  
 spring:
   application:
     name: jeecg-system