From 72c4a0374c547eb7ab9a861f1e3137db4d8a7a08 Mon Sep 17 00:00:00 2001 From: zhaowenyuan Date: Mon, 6 May 2024 11:32:48 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisplus/core/config/GlobalConfig.java | 6 +++ .../inner/PaginationInnerInterceptor.java | 47 +++++++++++-------- .../redis/config/RedisConfiguration.java | 4 +- .../config/properties/RedissonProperties.java | 8 +--- .../src/main/resources/application.yml | 22 +++++++-- .../src/main/resources/bootstrap.yml | 12 ++--- 6 files changed, 58 insertions(+), 41 deletions(-) diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java b/chushang-common/chushang-common-mybatis/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java index 6a2f347..f381965 100644 --- a/chushang-common/chushang-common-mybatis/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java +++ b/chushang-common/chushang-common-mybatis/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java @@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.baomidou.mybatisplus.core.handlers.PostInitTableInfoHandler; import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; @@ -77,6 +78,11 @@ public class GlobalConfig implements Serializable { * 元对象字段填充控制器 */ private MetaObjectHandler metaObjectHandler; + /** + * 参与 TableInfo 的初始化 + */ + private PostInitTableInfoHandler postInitTableInfoHandler = new PostInitTableInfoHandler() { + }; /** * 主键生成器 */ diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java b/chushang-common/chushang-common-mybatis/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java index d65cb95..c1965ea 100644 --- a/chushang-common/chushang-common-mybatis/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java +++ b/chushang-common/chushang-common-mybatis/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java @@ -58,8 +58,6 @@ import java.util.stream.Collectors; * * @author hubin * @since 3.4.0 - * - * 修改无法使用原生sql 的 warn 打印 */ @Data @NoArgsConstructor @@ -69,7 +67,7 @@ public class PaginationInnerInterceptor implements InnerInterceptor { * 获取jsqlparser中count的SelectItem */ protected static final List COUNT_SELECT_ITEM = Collections.singletonList( - new SelectExpressionItem(new Column().withColumnName("COUNT(*)")).withAlias(new Alias("total")) + new SelectExpressionItem(new Column().withColumnName("COUNT(*)")).withAlias(new Alias("total")) ); protected static final Map countMsCache = new ConcurrentHashMap<>(); protected final Log logger = LogFactory.getLog(this.getClass()); @@ -333,13 +331,22 @@ public class PaginationInnerInterceptor implements InnerInterceptor { } // 不区分大小写 str = str.toLowerCase(); - String onExpressionS = join.getOnExpression().toString(); - /* 如果 join 里包含 ?(代表有入参) 或者 where 条件里包含使用 join 的表的字段作条件,就不移除 join */ - if (onExpressionS.contains(StringPool.QUESTION_MARK) || whereS.contains(str)) { + + if (whereS.contains(str)) { + /* 如果 where 条件里包含使用 join 的表的字段作条件,就不移除 join */ canRemoveJoin = false; break; } + + for (Expression expression : join.getOnExpressions()) { + if (expression.toString().contains(StringPool.QUESTION_MARK)) { + /* 如果 join 里包含 ?(代表有入参) 就不移除 join */ + canRemoveJoin = false; + break; + } + } } + if (canRemoveJoin) { plainSelect.setJoins(null); } @@ -350,7 +357,7 @@ public class PaginationInnerInterceptor implements InnerInterceptor { return select.toString(); } catch (JSQLParserException e) { // 无法优化使用原 SQL - logger.warn("无法优化使用原生sql"); + logger.warn("optimize this sql to a count sql has exception, sql:\"" + sql + "\", exception:\n" + e.getCause()); } catch (Exception e) { logger.warn("optimize this sql to a count sql has error, sql:\"" + sql + "\", exception:\n" + e); } @@ -405,14 +412,14 @@ public class PaginationInnerInterceptor implements InnerInterceptor { protected List addOrderByElements(List orderList, List orderByElements) { List additionalOrderBy = orderList.stream() - .filter(item -> StringUtils.isNotBlank(item.getColumn())) - .map(item -> { - OrderByElement element = new OrderByElement(); - element.setExpression(new Column(item.getColumn())); - element.setAsc(item.isAsc()); - element.setAscDescPresent(true); - return element; - }).collect(Collectors.toList()); + .filter(item -> StringUtils.isNotBlank(item.getColumn())) + .map(item -> { + OrderByElement element = new OrderByElement(); + element.setExpression(new Column(item.getColumn())); + element.setAsc(item.isAsc()); + element.setAscDescPresent(true); + return element; + }).collect(Collectors.toList()); if (CollectionUtils.isEmpty(orderByElements)) { return additionalOrderBy; } @@ -467,10 +474,10 @@ public class PaginationInnerInterceptor implements InnerInterceptor { @Override public void setProperties(Properties properties) { PropertyMapper.newInstance(properties) - .whenNotBlank("overflow", Boolean::parseBoolean, this::setOverflow) - .whenNotBlank("dbType", DbType::getDbType, this::setDbType) - .whenNotBlank("dialect", ClassUtils::newInstance, this::setDialect) - .whenNotBlank("maxLimit", Long::parseLong, this::setMaxLimit) - .whenNotBlank("optimizeJoin", Boolean::parseBoolean, this::setOptimizeJoin); + .whenNotBlank("overflow", Boolean::parseBoolean, this::setOverflow) + .whenNotBlank("dbType", DbType::getDbType, this::setDbType) + .whenNotBlank("dialect", ClassUtils::newInstance, this::setDialect) + .whenNotBlank("maxLimit", Long::parseLong, this::setMaxLimit) + .whenNotBlank("optimizeJoin", Boolean::parseBoolean, this::setOptimizeJoin); } } diff --git a/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/config/RedisConfiguration.java b/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/config/RedisConfiguration.java index 1e86782..273c653 100644 --- a/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/config/RedisConfiguration.java +++ b/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/config/RedisConfiguration.java @@ -1,6 +1,5 @@ package com.chushang.redis.config; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.chushang.common.core.exception.utils.AssertUtil; import com.chushang.common.core.util.StringUtils; @@ -55,6 +54,7 @@ public class RedisConfiguration extends CachingConfigurerSupport { AssertUtil.invalidate(StringUtils.isEmpty(address), "redisson 配置错误"); // 使用单机模式 config.useSingleServer() + .setClientName(redissonProperties.getClientName()) //设置redis key前缀 .setNameMapper(new KeyPrefixHandler(redissonProperties.getPrefix())) .setTimeout(redissonProperties.getTimeout()) @@ -77,6 +77,7 @@ public class RedisConfiguration extends CachingConfigurerSupport { config.useClusterServers() //设置redis key前缀 .setNameMapper(new KeyPrefixHandler(redissonProperties.getPrefix())) + .setClientName(redissonProperties.getClientName()) .setTimeout(redissonProperties.getTimeout()) .setPassword(redissonProperties.getPassword()) .setUsername(redissonProperties.getUsername()) @@ -93,6 +94,7 @@ public class RedisConfiguration extends CachingConfigurerSupport { } config.useSentinelServers() .setNameMapper(new KeyPrefixHandler(redissonProperties.getPrefix())) + .setClientName(redissonProperties.getClientName()) .setTimeout(redissonProperties.getTimeout()) .setUsername(redissonProperties.getUsername()) .setPassword(redissonProperties.getPassword()) diff --git a/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/config/properties/RedissonProperties.java b/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/config/properties/RedissonProperties.java index 1a4c2ff..21239ca 100644 --- a/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/config/properties/RedissonProperties.java +++ b/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/config/properties/RedissonProperties.java @@ -2,16 +2,10 @@ package com.chushang.redis.config.properties; import lombok.Data; import lombok.NoArgsConstructor; -import org.redisson.config.ClusterServersConfig; -import org.redisson.config.ReadMode; -import org.redisson.config.SentinelServersConfig; -import org.redisson.config.SubscriptionMode; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; -import java.util.List; - /** * @auther: zhao * @date: 2024/4/29 15:52 @@ -19,7 +13,7 @@ import java.util.List; @Data @RefreshScope @Configuration -@ConfigurationProperties(prefix = "redis.config") +@ConfigurationProperties(prefix = "config.redis") public class RedissonProperties { private String prefix; diff --git a/chushang-modules/chushang-module-system/system-service/src/main/resources/application.yml b/chushang-modules/chushang-module-system/system-service/src/main/resources/application.yml index f7ebb5d..8c2bd0c 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/resources/application.yml +++ b/chushang-modules/chushang-module-system/system-service/src/main/resources/application.yml @@ -7,17 +7,29 @@ server: tomcat: uri-encoding: UTF-8 threads: - max: 200 - min-spare: 25 + max: 800 + min-spare: 100 spring: application: name: @artifactId@ + # 如果需要使用读写分离, 此处需要改造, 有没有办法不用改? datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver - username: ${conf.jdbc.cacc.master.username} - password: ${conf.jdbc.cacc.master.password} - url: jdbc:mysql://${conf.jdbc.cacc.master.host}:${conf.jdbc.cacc.master.port}/${conf.jdbc.cacc.master.database}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai + username: ${conf.jdbc.cs.master.username} + password: ${conf.jdbc.cs.master.password} + url: jdbc:mysql://${conf.jdbc.cs.master.host}:${conf.jdbc.cs.master.port}/${conf.jdbc.cs.master.database}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai + hikari: + # 最大线程池数量 + maximum-pool-size: 30 + # 最小线程池数量 + minimum-idle: 5 + # 检测连接 + connection-test-query: SELECT 1 + # 连接超时时间 默认30分钟 + connection-timeout: 30000 + # 连接最大生存期间, 默认30分钟 + #max-lifetime: 300000 devtools: restart: enabled: true diff --git a/chushang-modules/chushang-module-system/system-service/src/main/resources/bootstrap.yml b/chushang-modules/chushang-module-system/system-service/src/main/resources/bootstrap.yml index 7662366..e74a593 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/resources/bootstrap.yml +++ b/chushang-modules/chushang-module-system/system-service/src/main/resources/bootstrap.yml @@ -1,11 +1,7 @@ -server: - tomcat: - uri-encoding: UTF-8 - threads: - max: 200 - min-spare: 25 - connection-timeout: 5000ms spring: + config: + import: + -: "classpath:application.yml" cloud: loadbalancer: cache: @@ -23,7 +19,7 @@ spring: server-addr: ${spring.cloud.nacos.discovery.server-addr} namespace: ${spring.cloud.nacos.discovery.namespace} group: ${spring.cloud.nacos.discovery.group} - file-extension: yml + file-extension: yaml refresh-enabled: true prefix: ${spring.application.name} shared-configs: