Spring Boot 项目 Dockerfile 调整优化备忘 —— Could not find or load main class PropertiesLauncher

文章说明了 Spring Boot 3.2 版本将 PropertiesLauncher 和 JarLauncher 类移至org.springframework.boot.loader.launch 包。这影响了使用解压 fat JAR 方式构建 Docker 镜像的 Dockerfile,需更新 ENTRYPOINT 命令中的类路径。java -jar 启动方式不受影响。建议利用 Spring Boot 分层 JAR 特性和 Docker 多阶段构建优化镜像,并记得关注 Release Notes 以便跟进相应变更。

JAVA 上传文件到对象存储出现OOM

本文讨论了在Java应用程序中将文件上传到对象存储时出现的内存不足错误。当使用流式上传到S3时,如果直接调用S3客户端的putObject方法,会出现内存不足的风险,因为数据会全部缓存在内存中。解决方法是设置好对象的内容大小,即设置Content Length,以避免内存耗尽的错误。

K8s 中微服务优雅滚动更新

本文介绍了在 Kubernetes 中实现 Spring Cloud 微服务的优雅滚动更新。通过配置 Eureka 和 Ribbon 的参数来缩短服务注册信息的刷新间隔,并让网关在请求异常时重试一次。另外,通过设置 Pod 的 terminationGracePeriod 和 PreStop 钩子来主动下线旧版本的微服务,保证服务的平滑终止。最后,建议集成 Spring Cloud Kubernetes 来代替 Eureka,进一步提升服务升级的平滑度,实现无感知更新。

Spring Boot 项目接口 XSS 漏洞处理

本文介绍了在 Spring Boot 项目中避免 XSS 漏洞的几种方式。首先,可以使用 Spring 框架提供的 HtmlUtils 类对特殊字符进行转义处理。其次,可以使用 Jsoup 库对 HTML 标签进行过滤,保留需要的标签并删除不必要的标签。另外,还可以通过装饰者模式结合过滤器或拦截器对请求参数进行过滤转义。最后,对于 JSON 形式传参的场景,可以定义一个全局的 JSON 反序列化器来进行处理。总之,通过这些方式可以有效地避免 Spring Boot 项目中的 XSS 漏洞。

K8s Pod中应用如何获取客户端 IP

在 Kubernetes (K8s) 的 Pod 中运行的应用,想要获取客户端的真实 IP 地址信息,可以通过检查 "X-Original-Forwarded-For" 请求头来获取。在 K8s 集群中,请求经过 Ingress Controller 处理后,会将真实的客户端 IP 地址添加到该请求头中。因此,应用需要通过提取该请求头来获取客户端 IP 信息。需要注意的是,在 Ingress 资源中配置 "nginx.ingress.kubernetes.io/proxy-real-ip-cidr" 注解来启用对该请求头的支持。通过这种方式,应用可以准确获取到客户端的 IP 地址信息。

为什么 @Autowired 注解在 IDEA 中会有警告提示

在 IDEA 中,使用 @Autowired 注解会出现警告提示。这是由于最佳实践和设计原则导致的。字段注入方式虽然简洁方便,但存在一些问题,会增加应用程序与框架之间的紧耦合。为了消除警告,可以使用 @Resource 注解替换 @Autowired 注解。三种主要的依赖注入方式是:字段注入、构造函数注入和 Setter 方法注入。推荐使用构造函数注入,并可结合 lombok 来简化代码。