Spring Boot 指定外部配置文件主要有以下几种方式: 一、默认扫描位置(不需要额外指定) Spring Boot 启动时会自动扫描以下位置(JAR 包所在目录): ./config/子目录/ ./config/ ./ ← JAR 包同级目录 所以最简单的方式就是把配置文件直接放在 JAR 包旁边: /app/ […]
Spring Boot 指定外部配置文件主要有以下几种方式: 一、默认扫描位置(不需要额外指定) Spring Boot 启动时会自动扫描以下位置(JAR 包所在目录): ./config/子目录/ ./config/ ./ ← JAR 包同级目录 所以最简单的方式就是把配置文件直接放在 JAR 包旁边: /app/ […]
优先级从高到低排列,高优先级覆盖低优先级的同名属性。 一、运行时参数(最高) 1. 命令行参数 java -jar app.jar --server.port=9090 2. JVM 系统属性 java -Dserver.port=9090 -jar app.jar 3. OS 环境变量 export SERVER_P […]
这个算是比较常用的一个Java工具了,记录一下。 一、最常用:jmap -histo(JDK 自带) # 查看所有对象的实例数和内存占用(按大小排序) jmap -histo <pid> # 只看存活对象(先触发一次 Full GC,再统计) jmap -histo:live <pid> 输出示 […]
服务探活端口和业务端口不一致,本质上是用一个"旁路"来代表主服务的健康状态。 一、最核心的问题:探活结果不准 1. 探活端口正常 ≠ 业务正常 探活端口通常是一个独立的 HTTP 端点(比如 Spring Boot Actuator 的 /health 跑在另一个端口),它只检查 JVM 能不能响应 […]
背景 自己封装了一个Apollo的客户端,在官方支持@Value注解自动刷新的基础上,额外封装了@RefreshScope和@ConfigurationProperties注解的自动刷新,代码如下: import com.ctrip.framework.apollo.model.ConfigChangeEvent; i […]
1. 概述 jasypt-spring-boot 是 Jasypt(Java Simplified Encryption)加密框架与 Spring Boot 的集成组件,用于对 Spring Boot 应用配置文件中的敏感信息(如数据库密码、API 密钥、Token 等)进行加密保护,防止敏感信息以明文形式出现在配置文 […]
DeferredLog 全称延迟日志,包路径:org.springframework.boot.logging.DeferredLog,是 SpringBoot 内置工具类,解决容器启动早期日志系统还未初始化,直接打日志丢失的问题。 一、核心原理 启动时序问题 Spring 启动流程: 系统属性初始化 → Enviro […]
原文作者:Martin Fowler | 发布时间:2018-04-24 原文地址:https://martinfowler.com/articles/break-monolith-into-microservices.html 前言:拆分什么、何时拆分 随着单体系统体量日趋庞大、维护成本激增,大量企业选择将其改造为微 […]
SchedulingConfigurer 是 Spring 定时任务的高级配置接口,用来替代简单的 @Scheduled 注解。 它的核心作用: 让定时任务支持:动态修改执行周期、程序运行中改 cron、从数据库/配置中心读取 cron 表达式,不用重启服务。 一、它解决什么问题? @Scheduled(cron = […]
要让Jackson直接使用类的字段(Field) 进行序列化和反序列化,而非默认的getter/setter方法,核心是修改Jackson的属性访问策略:关闭对getter/isGetter/setter的自动检测,开启对所有字段(无论访问修饰符)的检测。 下面分通用Java项目、Spring Boot项目、局部类注解 […]
org.apache.ibatis.plugin.Interceptor 是 MyBatis 插件体系的核心扩展接口,MyBatis 提供的插件机制完全基于这个接口实现——它允许开发者通过动态代理拦截 MyBatis 核心执行流程中的关键方法,在不修改框架源码的前提下,对 MyBatis 的执行逻辑做自定义增强(如分页 […]
在Java开发的日常场景中,导入语句似乎是绕不开的“小麻烦”。新手会困惑为何String无需导入而List必须手动引入,资深开发者也常会在切换业务场景时,为查找Stream类的包路径、处理Date类的同名冲突而卡顿。传统导入方式的臃肿与繁琐,让不少开发者羡慕Python“开箱即用”的模块机制。而JDK 25正式落地的J […]
在高并发场景中,线程间的数据交换是核心环节,而队列作为数据缓冲的关键组件,其性能直接决定了整个系统的吞吐能力和延迟表现。传统并发队列在面对超高吞吐需求时,往往受限于锁竞争、内存开销等问题,难以满足金融交易、高频计算等极端场景的要求。Disruptor 作为一款高性能无锁队列框架,通过创新的设计理念和底层优化,成功突破了 […]
在Linux系统中,文件系统的层次结构严格遵循Filesystem Hierarchy Standard(FHS)规范,根目录 / 作为整个文件系统的"基石",承载着系统运行、软件部署和数据存储的核心功能。每个子目录都有明确的职责划分,理解其背后的设计逻辑和实际用途,是运维工程师高效管理系统、开发者 […]
一、乐观锁核心原理 乐观锁的核心是“假设不会发生并发冲突,只在提交更新时检查数据是否被修改过”,而非像悲观锁(如SELECT ... FOR UPDATE)那样提前锁定数据。 核心逻辑:更新数据时,先验证数据的“版本/时间戳”是否和自己读取时一致——一致则更新,不一致则说明数据已被其他线程修改,放弃更新(或重试)。 适 […]
你可以迷茫,但不要虚度。
COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.