博客
Ubuntu编译调试OpenJDK8
Centos编译调试OpenJDK11下载源码非官方 切换到jdk8u分支https://github.com/unofficial-openjdk/openjdk.git编译编译jdk需要一个引导jdk, 引导jdk版本需要比编译版本小一个版本或等于当前版本命令行运行sh configure -
Nacos服务发现客户端流程
基于nacos-client:1.4.2Nacos有推/拉两种模式1. 推由Nacos服务端主动发起, 通过UDP进行推送2. 拉由客户端发起启动时调用nacos接口拉取一次调用指定服务时拉取一次通过定时器定时拉取流程梳理如下流程图
微服务架构中OpenFeign请求的流程
1. 代理目标方法注入容器 (OpenFeign)2. 创建请求对象, 组装参数 (OpenFeign)3. 维护服务注册表(Ribbon + Nacos), 且根据负载均衡算法(Ribbon)选取一个真实的服务地址将http://base-service/getInfo替换为http://127.
Ribbon为服务创建独立上下文的流程
从Feign接口开始goodsFeignClient.getGoods(id)
进入代理类的拦截方法feign.ReflectiveFeign.FeignInvocationHandler#invoke
feign.SynchronousMethodHandler#invoke
继续跳转, 默认使
解决Eureka默认缓存配置导致服务无法被调用
开发环境下, 比如A服务调用B服务, B服务更改代码重启后, A服务足足要等上一两分钟才能正常调用到B服务无疑是浪费生命技术架构是Eureka+OpenFeign+RibbonRibbon配置Ribbon调用这个方法启动了一个定时器, 该定时器定期刷新ribbon内缓存的服务列表com.netfli
MyBatis-Plus动态返回实体类
1. 自定义SqlSession@Slf4j
public class GenericSqlSession extends DefaultSqlSession {
private static final ThreadLocal<Class<?>> CTX = new ThreadLoca
自定义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
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的每个部分可能相同,但是如果每个部分都去执行一遍的话,