自定义SpringCache For Redis配置
SpringCache抽象了缓存使用场景, 对外提供注解, 无需繁琐配置即可获得缓存能力默认支持一堆缓存中间件, 其中就包括Redis在此仅提供一种缓存配置的思路
@Data
@Component
@ConfigurationProperties(prefix = "spring.cache.red
SpringBoot自定义枚举序列化方式
在平常web开发中, 或多或少的会使用到枚举类型但是springboot对枚举的序列化并不太符合实际开发需求比如public enum MerchantStatusEnum {
NORMAL(100, "正常"),
BAN(200, "封禁");
private fina
Java9-17新特性总结
年底即将发布的SpringBoot3.0最低支持Java17版本这里记录下新语法和值得注意的库语法特性moduleJDK9模块系统 Java 9 模块的重要特征是在其工件的根目录中包含了一个描述模块的 module-info.java 文 件通过exports向外开放接口/类, 限定模块使用范围同时
Ubuntu20.04升级gcc/g++
默认版本是9.4.0第一步add-apt-repository ppa:ubuntu-toolchain-r/test
第二步apt update
第三步apt install gcc-11
apt install g++-11
查看是否安装成功ls /usr/bin/gcc*
ls /usr/bi
PostgreSQL设置自增字段
postgres 自增需要先进行创建自增序列, 指定自增值, 最小值, 最大值:CREATE SEQUENCE "public"."tt_id_seq" INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;
设置序列
Slf4j+Logback MDC使用
MDC 可用于绑定日志上下文信息Slf4j: org.slf4j.MDCslf4j作为日志门面, 定义了相当多的规范例: 生成一个唯一id, 来区分输出的日志归属于哪次http请求效果20:43:30.204 [xid=1529443036298219520] [XNIO-1 task-1 ] I
SpringBoot LocalDateTime序列化配置
项目中用LocalDateTime替换Date后, 许多地方需要增加配置配置Json响应格式化方式注册JavaTimeModule/**
* 序列化LocalDateTime
*/
@Bean
public JavaTimeModule javaTimeModule() {
JavaTi
MySQL主从复制搭建
masterdocker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --network rootnet --ip 172.18.0.10 -v /usr/soft/mysql-master/data:/var/lib/mysql:rw -v /u
OpenFeign统一Fallback处理
@Slf4j
@Configuration(proxyBeanMethods = false)
public class FeignLoadBalancedConfiguration {
@Bean
public LoadBalancerFeignClient feignClie
Java服务高CPU占用代码排查方法
1.查找进程通过top -c命令可以确定出现问题的进程2.查找线程 接下来就要找到这个进程中是哪个线程出现问题这个确定也是比较简单的,只需要输入命令:top -Hp PID例top -Hp 9828
3.定位代码jstack 进程PID | grep 线程id的16进制 -c 显示行数jstack
Seata分布式事务环境搭建
下载seata服务端https://github.com/seata/seata/releases修改registry.conf这里使用nacos做注册中心和配置中心, 也就不需要服务端的file.conf了但是使用nacos时, nacos的密码不能有特殊符号, 否则seata可能连接不上regi
SpringBoot读写分离配置与事务
引入依赖<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.1</version>
MySQL InnoDB 加锁机制
MySQL 版本: 8.0.25隔离级别: 可重复读InnoDB有两种不同的SELECT,即普通SELECT 和 锁定读SELECT. 锁定读SELECT 又有两种,即SELECT ... FOR SHARE 和 SELECT ... FOR UPDATE; 锁定读SELECT 之外的则是 普通SE
MySQL InnoDB MVCC机制
对于普通select来说, InnoDB使用MVCC保证了事务隔离. 同一事务的两次相同查询语句都是同样结果, 其他事务修改记录不影响当前事务, 特殊情况是会看到同一事务中先前语句所做的更新, 所以对于普通select(快照读)来说, MVCC是解决了脏读/不可重复读/幻行的; 而对于当前读(锁定读
MySQL WITH AS 语法
如果一整句查询中多个子查询都需要使用同一个子查询的结果,那么就可以用with as,将共用的子查询提取出来,加个别名。后面查询语句可以直接用,对于大量复杂的SQL语句起到了很好的优化作用特别对于UNION ALL比较有用. 因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,
MyBatis处理一对多关系时的性能考虑
Mybatis框架对于处理一对多的情况有两种方法查询的时候JOIN子表, 然后交给MyBatis拼装数据查询的时候不JOIN子表, 主表查询完成后发起select再查询关联表数据, 还可以配置fetchType=lazy进行懒加载这两种方法各有问题:第一种方案有两个缺陷: 1) 做分页查询的时候不准
C++ 获取Windows环境变量
#include <windows.h>
string getValue(const char* env) {
string value = "";
char valueArr[1024] = { 0 };
unsigned int pathSize = GetEnvi
MyBatis-Plus部分方法封装
在此仅记录一种思路public interface SuperMapper<T> extends BaseMapper<T> {
default List<T> idNotInList(List<?> idList) {
return selectList(new Quer
Java Stream flatMap解析
flatMap对流扁平化处理运行如下代码 String[] words = new String[]{"Hello", "World"};
List<String> a = Arrays.stream(words)
.map(word
IDEA方法注释模板
设置tab键触发注释模板内容**
* <p>$methodName$</p>
*$param$ $return$
* @Title $methodName$
* @author kyaa
* @date $date$ $time$
*/
变量填充param自己脚本模拟def result