2025年6月工作经验记录

1 @Slf4j和LoggerFactory

@Slf4jLombok的注解,它将自动为类生成一个名为 logLogger 实例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyService {
public void test() {
log.info("Hello from @Slf4j");
}
}

// 相当于:
public class MyService {
private static final Logger log = LoggerFactory.getLogger(MyService.class);

public void test() {
log.info("Hello from @Slf4j");
}
}
比较点 @Slf4j LoggerFactory.getLogger()
写法简洁 是,注解自动生成 否,需要手动定义
灵活性 固定名为 log,不可更改 可自定义变量名
可读性 更整洁,适合现代开发 明确、兼容 Lombok-free 项目
依赖 需要 Lombok 和 IDE 插件支持 无额外依赖,纯 SLF4J

2 Jackson控制序列化和反序列化

Jackson学习笔记复习:[[Jackson学习笔记]]

  • 序列化:对象 -> json字符串
  • 反序列化:json字符串 -> 对象

控制序列化的四个注解:

注解 控制序列化 控制反序列化 说明
@JsonProperty 双向绑定,最常用,影响序列化和反序列化
@JsonAlias 只用于反序列化(接收多种别名)
@JsonGetter("xxx") 只用于序列化时改名
@JsonSetter("xxx") 只用于反序列化时指定字段名

示例

  • @JsonAlias
1
2
3
{
"push_type": 1
}
1
2
3
4
5
public class MyClass {
// 接收push_type
@JsonAlias("push_type")
private String message;
}
  • @JsonGetter:注解在getter方法上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 假设前端需要的格式
{
"xAxis": [
"2025-05-30",
"2025-05-31",
"2025-06-01",
"2025-06-02",
"2025-06-03",
"2025-06-04",
"2025-06-05"
],
"yAxis": [
0,
0,
0,
0,
0,
0,
2
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class WarningNumVO {
private List<String> timeRange;

private List<Integer> warningNum;

// 指定序列化字段的名称
@JsonGetter("xAxis")
public List<String> getTimeRange() {
return timeRange;
}

// 指定序列化字段的名称
@JsonGetter("yAxis")
public List<Integer> getWarningNum() {
return warningNum;
}
}

3 docker-compose相关

  • 依赖本地镜像进行build
1
DOCKER_BUILDKIT=0 docker-compose build
  • 只构建其中某个镜像:
1
docker-compose build <服务名>

例如,假设dockerfile

1
2
3
4
5
6
7
services:
web:
build: ./web
db:
image: mysql:8.0
api:
build: ./api

如果只构建web:

1
docker-compose build web
  • 指定容器时区:
1
2
3
4
5
6
version: '3.8'
services:
myservice:
image: your-image
environment:
- TZ=Asia/Shanghai # 指定时区
  • 容器相关命令
1
2
3
4
5
6
7
8
9
10
# 构建并后台启动所有服务容器
docker-compose up -d
# 停止容器
docker-compose stop
# 停止并删除所有容器、网络、卷等
docker-compose down
# 启动已存在但已停止的服务容器
docker-compose start
# 重启服务容器
docker-compose restart

4 SpringBoot Admin循环登陆问题

问题:登陆成功后又重定向到了登陆页面;

解决:清除所有缓存

以Goole浏览器为例:

1
设置 --> 隐私和安全 --> 第三方Cookie --> 查看所有网站数据和权限

5 Nacos为服务设置的IP

image-20250612152239870

当一个微服务注册到 Nacos 上时,Nacos 中显示的“微服务 IP”指的是该服务实例在网络中的访问地址(IP地址)。它代表的是其他服务想要访问这个服务实例时,该实例所监听的 IP 地址。

假设有一个服务叫做 user-service,运行在一台主机 192.168.1.100 上,监听的端口是 8080。这个服务在注册到 Nacos 后,Nacos 中会显示:

1
2
3
4
服务名:user-service
IP:192.168.1.100
端口:8080
健康状态:UP

微服务注册到 Nacos 时,默认使用的是服务所在主机的内网 IP(eth0 或容器内的网络地址)

显示指定:

1
2
3
4
5
spring:
cloud:
nacos:
discovery:
ip: 10.0.0.123 # 指定注册到 Nacos 的 IP

6 Nacos下线服务报错

报错信息:errCode: 500, errMsg: do metadata operation failed

解决:删除目录/home/nacos/data/protocol,然后重启nacos