- 博客(47)
- 收藏
- 关注
原创 netty使用ChunkedWriteHandler发送TextWebSocketFrame消息导致内存溢出
源码可知所有的消息都会被放置queue队列中,同时也不会触发channel高低水位设置,在大量消息堆积时导致内存无法回收OOM。在加入queue前对消息类型进行了判断,因此TextWebSocketFrame消息将不会进入队列!此版本ChunkedWriteHandler 的write方法如下。解决:升级netty版本!
2024-04-02 14:00:32
851
原创 Springboot实现获取@Value中同字符串从yml加载后的值
自定义注解,希望能够和@Value注解使用一样的value值表达式格式从而动态的从yml中获取配置。.doResolveDependency() 方法。@Value注解通过参数获取值可断点至。
2024-03-07 20:51:41
549
原创 rabbit MQ生产环境通过管理界面创建交换机踩坑记录
第一次发布时在管理端创建了错误参数的交换机,后续代码报错code=406,发现错误日志后通过管理端删除了错误的交换机并创建了正确的交换机。由于生产环境不便于重启,一直使用的是错误的channel实例即使创建了正确的交换机代码运行依然报错!,我却一直忽略了,以为虽然本次执行报错channel关闭但是他每次执行exchangeDeclare()方法时都会重新恢复channel;属性,一旦该属性有值后后续所有的exchangeDeclare操作都会报错且打印已有的shutdownCause,并不会去与mq交互;
2024-01-24 17:07:07
464
转载 Mybatis plus sql日志打印
通过Mybatis拦截器实现统计sql执行时间及打印完整sql语句代码import java.sql.Connection;import java.text.DateFormat;import java.util.Date;import java.util.List;import java.util.Locale;import java.util.Properties;import java.util.regex.Matcher;import lombok.extern.slf4j.Sl
2024-01-23 15:34:36
187
原创 通过继承WebMvcConfigurationSupport配置静态资源映射不生效的问题
WebConf类继承自WebMvcConfigurationSupport,这可能会覆盖Spring Boot的自动配置。尽量避免直接继承WebMvcConfigurationSupport,而是实现WebMvcConfigurer接口,并使用@Configuration注解。配置完之后发现配置不生效日志也不打印~
2023-06-02 11:07:47
469
1
原创 使用mybatis-plus的分页插件在开启join优化后,当出现cs、ur、uu等 隔离级别的关键字sql优化时会出现大量警告
mybatis-plus分页插件在出现cs、ur、uu等 隔离级别的关键字join优化功能启用时打印大量警告
2023-02-24 16:03:14
594
原创 SpringBoot基于jackson序列化的字典表转换的注解实现
启动时自动查询码表存储至缓存–>根据注解识别带转码字段–>jackson序列化时自动去缓存中获取待转码的值。本项目采用reids缓存自动转码的系列化实现代码中涉及到的Constants为项目中自定义的一些常量,自己随意定义即可自动查询数据库并将转码对应关系缓存至缓存的注解使用示例:项目启动自动加载码表的实现逻辑使用添加完上述代码后就完成了所有的准备工作了。1:在mapper中添加查询的方法使用示例:mapper接口如下xml如下2:在实体类待转码属性上添加注解即可...
2022-06-27 17:25:59
1598
原创 oracle函数将多级标签逗号拼接的单个字段洗涤成仅含一级标签的字段
需求:原始表的类型标签字段数据采用父子标签-拼接,多个标签,拼接。如tag1-subTag1,tag2,subTag5。而上述数据我们的目标标签字段应该为tag1,tag2,其他类型。
2022-06-27 16:55:21
131
原创 手机控车智能钥匙架构图
服务调用架构图流程说明:设备建立连接:设备通过ip+端口连接netty服务,通过服务端的数据协议校验即可建立连接,连接建立后会在本地ConcurrentHashMap中存储设备号与channel的对应关系,channel的attr中缓存协议名称、设备标志,缓存缓存设备号:netty服务ip端口信息至redis缓存websocket建立连接:根据设备id通过web服务获取netty服务域名信息,连接url需拼接token参数供后端登陆校验设备上传信息流程:设备上传信息—>解析设备上传信
2022-06-27 16:40:54
234
原创 Oracle函数笔记
会将分组内的多条数据的指定字段通过,拼接填充至一个指定字段eg:表test_table如下:上述sql查询后查询结果如下:ROW_NUMBER 是一个解析函数。它为应用它的每一行(分区中的每一行或查询返回的每一行)分配一个唯一编号,在 order_by_clause 中指定的有序行序列中,从 1 开始。通过在检索指定范围的 ROW_NUMBER 值的查询中嵌套使用 ROW_NUMBER 的子查询,您可以从内部查询的结果中找到精确的行子集。该函数的这种使用使您可以实现 top-N、bottom-N 和
2022-06-24 15:46:48
136
原创 tcp通信解析工具类
import java.nio.charset.StandardCharsets;import java.util.Arrays;/** * @author yousili * @since 2021/9/23 */public class BytesHelper { /** * byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序。 * * @param ary byte数组 * @param offset 从数组的第o
2021-12-20 17:58:48
707
原创 Netty向ChannelPipeline中添加多个Decoder不生效的问题
ByteToMessageDecoder解码器业务逻辑如下:自定义Decoder拿到tcp的数据,按照支持的协议标记去匹配确定该数据采用的协议。将协议标记绑定到channel的attr中。向当前的ChannelPipeline中添加协议指定的Decoder。代码大概逻辑如下:NettyServer:.......ChannelPipeline pipeline = socketChannel.pipeline();pipeline.addLast("protocolDecoder",
2021-11-24 17:21:35
1709
原创 springcloud alibaba+nacos+dubbo
pom文件 <!-- nacos-配置管理功能依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> &l
2021-10-29 14:55:15
684
原创 docker启动nacos(2.0.1)
docker启动nacos(2.0.1)单机模式+mysqldocker pull nacos/nacos-server:2.0.1 拉取镜像在MYSQL_SERVICE_DB_NAME所指定的数据库中创建表(建表sql:nacos_init.sql)###启动命令:docker run \--name nacos_8869 \-e JVM_XMS=2048m \-e JVM_XMX=2048m \-e MODE=standalone \-e NACOS_APPLICATION_POR
2021-06-17 17:40:41
1656
原创 sentinel双向同步nacos的环境搭建
sentinel客户端环境准备(spring cloud工程)项目中添加依赖: <!-- nacos-配置管理功能依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
2021-06-17 16:48:11
548
原创 linux通过shell脚本创建定时任务进行文件归档
#!/bin/shecho "定时任务执行"dateDir=$(date --date= +%Y%m)#mv2Dir为指定文件夹下的年月目录,即待存放文件的目录mv2Dir=/root/test/$dateDirecho $mv2Dir#判断是否存在$mv2Dir目录,不存在则创建该目录if [ ! -d $mv2Dir ];then mkdir $mv2Dirfi#查找/root/test目录下修改时间为小于1天(-1改为+30即为修改时间大于30天)的文件,并将文件移动至$mv
2021-06-09 18:36:26
468
原创 docker部署es+kibana+ik分词器
保持es、ik、kibana版本一致不然容器启动时会报错一、启动es容器先在https://github.com/medcl/elasticsearch-analysis-ik/releases下载es对应版本的ik分词器插件zip然后解压到主机的/ysl/elasticsearch/plugins/ik目录下,最后一级目录名需要为ik然后将该目录挂在给容器及下面指令中的-v /ysl/elasticsearch/plugins:/usr/share/elasticsearch/pluginsd
2021-04-29 17:23:00
320
原创 mysql报错Incorrect string value
[2021-04-23 18:05:37] [HY000][1366] Incorrect string value: '\xF0\x9F\x92\x8B' for column 'nickname' at row 75原因:DROP TABLE IF EXISTS auth_user;CREATE TABLE auth_user ( id BIGINT(20) NOT NULL COMMENT '主键', nickname varchar(32) DEFAULT '' COMMENT
2021-04-24 12:56:56
538
2
原创 nginx代理后ip丢失问题
nginx.conf中配置请求头处理:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;配置后请求头中ip将会采用累加的形式即:IP1,IP2,…获取真实访问ip工具类如下:import org.apache.commons.lang3.StringUtils;import javax.servlet.http.HttpServletRequest;public class IpAddressUtil { /**
2021-04-20 09:15:59
1181
转载 vue让钩子函数的异步代码可以同步执行(用到的路由守卫是: beforeRouterEnter)
https://www.jb51.net/article/152027.htm
2021-01-27 15:15:56
933
原创 logback-spring.xml文件配置参考
<?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>logback</contextName> <!-- 日志级别排序为: TRACE < DEBUG < INFO < WARN < ERROR --> <!--控
2020-12-23 14:38:28
430
原创 统计字符串中每个字符出现的次数
仅适用于jdk1.8+import java.util.*;public class Test { public static void main(String[] args) { String str = "adfasdvadsbdsgdsagdsgdsag"; Map<String, Integer> map = new HashMap<>(); List<String> strList = Arrays.
2020-12-18 10:49:44
786
转载 vue-v-model 双向绑定-编辑弹框修改数据后页面数据跟着更改(取消弹框操作也已经被修改数据),利用 Object.assign解决对象引用同址问题
在做项目中经常会遇到table表格某行进行编辑。当编辑表格行时弹出一个浮框,里面被赋值当前表格的各个元素。可以在此元素的基础上进行修改编辑操作。一般浮框的输入项是用双向绑定v-model。当点击编辑按钮时候把当前行的数据赋值给弹框内并渲染弹框数据。这时候问题就容易出现了:浮框数据改变发现页面数据也跟着改变了。如果只有确认按钮还能忍受,关键是数据已经改变,如果有取消编辑按钮,数据一样已经改变!其实原因很简单,数据是obj类型,赋值操作的时候把地址给共同绑定了。这也是一个js的基础问题,对象等赋值
2020-12-11 16:09:40
3621
4
原创 nginx配置upstream并设置max_fails=1 fail_timeout=6000s后有几率出现502
具体报错信息如下:2020/12/08 09:52:18 [error] 6#6: *832 no live upstreams while connecting to upstream, client: 10.78.104.169, server: 127.0.0.1, request: "POST /api/ppy-ls/login/check HTTP/1.1", upstream: "http://api//ppy-ls/login/check", host: "10.7.6.151:8080",
2020-12-08 18:52:03
1134
原创 oracle时间排序,字段为null处理
在oracle中空值时间字段,认为为最大,排序时间降序并把空值显示在最后需加在desc后加上nulls lastSELECT t.*FROM tablea tORDER BY is_del DESC, UPDATE_TIME desc nulls last;
2020-12-03 17:21:39
1608
原创 axios拦截器,登录超时跳转到login页面
import Vue from 'vue';import axios from "axios";import auth from '../components/auth/auth.js'import {Message,Loading} from 'element-ui'import router from '../router/index'let config = { timeout: 20 * 1000, // Timeout withCredentials: true, // Che
2020-11-27 16:03:19
1249
2
原创 使用Oracle进行机构权限设计时的一次优化
业务需求:机构用户只能查询到归属于本机构和下级机构的数据。(此处000为根节点机构代码)原始SQL:select * from a_table where belong_org_code in ( select org_code from org_table START WITH org_code = '000' connect by prior org_code = upper_org_code )由于机构信息过多in中的机构信息有一万多条,同时a表中拥有50多万的数
2020-11-24 20:06:45
96
原创 使用druid+oracle+mybatis时执行sql报错,但sql然能执行
com.alibaba.druid.sql.parser.ParserException: syntax error, expect RPAREN, actual WITH with at com.alibaba.druid.sql.parser.SQLExprParser.accept(SQLExprParser.java:1626) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.parser.SQLExprParser.inRest(SQLE
2020-11-23 18:07:35
909
1
原创 Oracle递归查询,根据机构查询机构及下级所有机构
select orgid, orgname, parentorgidfrom orgstart with orgid= 'xx' <!-- 机构号 -->connect by prior orgid = parentorgid <!-- 对机构赋值为父机构 进行查询关联 -->
2020-11-21 18:07:06
2465
原创 jekins+docker持续集成,云容器打包异常
项目采用的是私有仓库,A模块本地打包是正常的。可以拉到私有仓库自己deploy上去的common模块jar。云容器上mvn deploycommon模块也是没有问题的,但是打另一个依赖于common模块的A工程时,一直找不到common模块的子工程的包。后来发现问题的根源是:由于第一次在云容器上测试打包时命令错误,没有用mvn deploy而是用了mvn clean install -X -P dev 命令虽然后面及时将命令更正为mvn deploy但是这也就造成了一个问题:在第一
2020-11-06 18:03:34
133
原创 mybatis中if标签判断的大坑
if标签把空字符串和数字0判断成了相等,颠覆认知!!!<if test="a==''"></if>上面代码等价于<if test="a==0"></if>单个字符的写法多个字符可以这样写<if test="a=='abcd'"></if>但是单个字符用上面的写法则会报错,应该写成<if test='a=="a"'></if>或者<if test="a=='a'.toString
2020-10-28 22:51:30
1167
原创 XSSFWorkbook获取excel的值,封装成list集合
/** * 获取指定位置的数据值,全转为string * @param rowNum 所属行, 第一行为0 * @param colNum 所诉列, 第一列为0 * @return 值 */ public static String getValue(int rowNum, int colNum, XSSFSheet sheet){ XSSFCell cell = sheet.getRow(rowNum).getCell(colNu.
2020-10-20 18:10:34
2595
原创 java根据poi创建excel且实现列宽自适应及样式自定义功能
代码是伪代码,具体用什么数据类型来封装excel的数据可以根据实际情况选择。代码如下:public class ExcelBuilder { public static HSSFWorkbook createExcel(参数){ HSSFWorkbook wb = new HSSFWorkbook(); //创建样式对象 HSSFCellStyle cellStyle = setStyleXlsx(wb); for (int i =
2020-10-16 15:20:29
1047
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人