SpringBoot发送HTTP请求拦截器
通过restTemplate发送的http请求会被拦截,方便开发调试,正式环境尽量别用。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.http.HttpRequest;import org.springframework.http.client.ClientHttpRequestExecution;import org.springframework.http.client.ClientHttpRequestInterceptor;import org.springframework.http.client.ClientHttpResponse;import java.io.BufferedReader;import java.io.IOException;import jav ...
自定义注解:自定义注解参数校验
前言:常用的validation注解可能不太满足实际使用场景,基于它可以拓展自己的注解校验。
示例:自定义正则校验注解
@Constraint(validatedBy={IPattern.Validator.class}) 指定当前注解校验器(实现ConstraintValidator校验器的类)
@ConstraintComposition(CompositionType.AND) 引入外部注解时的规则(OR、AND、ALL_FALSE)
@ReportAsSingleViolation 引入外部注解时,外部注解的错误信息会使用当前注解的错误信息, 否则使用自己的错误信息
@Repeatable 是否支持重复注解, 在一个字段上多次使用(分组不同)
@OverridesAttribute 覆盖注解属性值(要指定被覆盖注解的某个属性名称)
一、自定义正则校验注解,替代javax.validation.constraints.Pattern注解
12345678910111213141516171819202122232425262728293031323334353637 ...
自定义注解:接口日志记录(SPEL)
示例:通过注解实现AOP切面接口日志记录
一、定义注解
12345678910@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface WebLog { String moduleName() default ""; //所属模块 String methodName() default ""; //接口名称 String params() default ""; //请求参数}
@Target:用于描述注解的使用范围,该注解可以使用在什么地方
ElementType.TYPE 应用于类、接口(包括注解类型)、枚举
ElementType.FIELD 应用于属性(包括枚举中的常量)
ElementType.METHOD 应用于方法
ElementType.PARAMETER 应用于方法的形参
ElementType.CONSTRUCTOR ...
Mysql字符集排查
Mysql表字段的排序规则不一致,可能导致查询错误,用此方法排查。
数据库所有表排序规则
1234-- 数据库所有表排序规则SELECT TABLE_SCHEMA '数据库',TABLE_NAME '表',TABLE_COLLATION '原排序规则',CONCAT('ALTER TABLE ',TABLE_NAME, ' CHARACTER SET=utf8mb4, COLLATE=utf8mb4_general_ci;') '修正SQL'FROM information_schema.`TABLES` where TABLE_SCHEMA = '你的数据库名' and TABLE_COLLATION != 'utf8mb4_general_ci';
数据库所有表字段排序规则
12345678910111213141516-- 数据库所有表字段排序规则SELECT TABLE_SCHEMA '数据库', ...
Redis大全(持续更新)
概述基础知识
官网(https://redis.io)
端口:6379
数据库:0~15
基础命令
1234567891011121314151617181920212223# 切换数据库select 1select 2# 查看当前数据库的key数量dbsize# 查看当前库所有keykeys *# 判断key是否存在exists key# 查看key的类型type key# 删除指定keydel name# 指定key过期时间expire key 10# 获取key过期时间(秒,-1永不过期,-2已经过期)ttl key# 清空当前数据库flushdb# 清空全部数据库flushall# 扫描数据库SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
基础5种类型String(字符串)SET(设置值)格式: SET key value [NX | XX] [GET] [EX | PX | EXAT | PXAT | KEEPTTL]
版本:1.0.0
其它选项:
EX seconds – 设置指定的到期时间,以秒为单位 ...
解决excel导出时超出最大行高(409)文字显示问题
解决excel导出时超出最大行高409问题前言:
在excel表格中,规定了每行最大行高为409。如果有大文本需要显示,则会因为超过范围而被隐藏。如果是在本地操作excel,可以通过合并单元格来增加行高,打破409行高限制。参考此种方式,得出poi导出excel时的操作方式,先看最终方案。
最终方案:
在模板中的大文本单元格后面,增加备用行,把备用行与大文本那一行合并
判断大文本单元格要显示的文字是否超出默认行高能显示的文字(自行根据实际情况判断)
默认高度如果不够显示大文本,则增加备用行的行高,直到判断能显示完整
过程中遇到的问题:
每行高度最大409,设置1000也没用,excel只显示到409。
按模板填充的excel导出,无法在导出过程中添加新的行。因为poi只能在最后一行的后面添加,中间插入会行号重复(报错)。这导致想要在导出过程中增加行,然后再合并单元格,打破409界限的方案走不通。
如何根据文字长度,判断需要的行高。这个只能结合实际情况去判断,影响因素有很多。
以下,是通过EasyExcel生成excel时,打破409行高限制的操作。通过Abstract ...
nginx流量复制
nginx流量复制
需求:将线上平台的流量转发到其它环境中
本文讲述如何通过nginx,将线上平台的流量请求拷贝到其它环境,默认线上平台与其它平台的网络互通。内外网互通查看frp教程。
在nginx(1.13.4)以上版本中,支持mirror 模块,因此需下载正确版本的nginx。下载地址
修改nginx配置
配置mirror流量在普通的location配置中增加一行mirror配置,这代表所有/api的请求都会复制一次到/mirror1,如果要复制很多,那就加很多行mirror就可以了。
1234567891011121314location /api { mirror /mirror1; #镜像 #mirror /mirror2; #镜像 #mirror /mirror3; #镜像 proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade&q ...
PDF骑缝章、定位签章、将PDF转图片格式
本文讲述通过PDFBox实现PDF的骑缝章、定位签章、PDF文本转图片功能,通过PDFBox实现的功能,是开源的可商用,而通过itext不能商用。
1. 导入PDFBox的依赖1234567891011<!--PDFBox--> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.17</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.17</v ...
influx2.3.0 操作指南
influx2.3.0 操作指南
版本:influx2.3.0
安装方式:docker安装
1、删除数据
12345# 按tag和按时间删除数据influx delete --bucket bucketName \ --start '1970-01-01T00:00:00Z' \ --stop $(date +"%Y-%m-%dT%H:%M:%SZ") \ --predicate '_measurement="测量点名称" AND tagName="参数"'
bucketName:存储桶名称
measurement:测量点名称
tagName:测量点定义的tag名称
2、导入/导出Line Protocol格式数据(influx cli)
influx特有的导出方式,导出内容类似于CSV文件格式,可以通过python将其转换为CSV,再导入其它数据库
12345678influxd inspect export-lp \ --bucket-id a7b ...
SpringBoot前后端参数优化
SpringBoot前后端参数优化1.去除前端入参的两端空格2.前后端枚举值互相转换3.处理后端NULL值
全局序列化操作,方便前后端传参,优化后端接口的调用体验,减少纠纷。
包含内容
前端传入的字符串类型参数,去除两端空格
前端传入的枚举类型参数,转换成后端枚举对象,方便参数校验
后端返回值为null时,对具体类型进行具体处理,如:list为null时,返回空数组
1~3都要用到Jackson2ObjectMapperBuilderCustomizer进行处理,首先定义一个JacksonConfig类,配置Bean
12345678@Configurationpublic class JacksonConfig { @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return new Jackson2ObjectMapperBuilder().build(); }} ...