Java 工程杂项怎么整理:限流、日志、ID 生成和 Locale

2次阅读
没有评论

工程项目里有很多小问题看起来零散:接口限流、上传并发控制、日志文件不输出、业务 ID 生成、字符串大小写和字符集。它们不一定值得单独成体系,但很适合沉淀成一张工程备忘清单。

限流先区分速率和并发

限流至少分两类:

  • 速率限制:例如每秒最多 5 次。
  • 并发限制:例如同一时间最多 4 个上传任务。

Guava RateLimiter 适合做速率限制:

RateLimiter limiter = RateLimiter.create(5.0);
if (limiter.tryAcquire()) {
    // 执行业务逻辑
}

如果要限制“同时进行中的任务数量”,更适合用信号量:

Semaphore semaphore = new Semaphore(4);
if (semaphore.tryAcquire()) {
    try {
        upload();
    } finally {
        semaphore.release();
    }
}

不要把这两类问题混在一起。

日志配置要兼顾 main 和 Spring Boot

有时直接运行 main 方法时,日志没有输出到文件。这通常和日志配置文件命名、加载路径和运行方式有关。

经验上:

  • Spring Boot 项目常用 logback-spring.xml
  • 普通 main 或非 Spring Boot 场景更容易识别 logback.xml
  • 配置要确认 appender、rolling policy、日志目录和级别。

如果一个工具既会被 Spring Boot 调用,又会被 main 方法单独跑,最好明确日志配置加载方式,避免排障时看不到文件日志。

ID 生成关注三个特性

业务 ID 常见要求:

  1. 唯一性。
  2. 趋势递增或可排序。
  3. 不容易被猜到。

Snowflake 适合分布式趋势递增 ID,但它不是万能方案。要关注:

  • 机器 ID 分配。
  • 时钟回拨。
  • 数据中心标识。
  • 是否暴露业务增长量。

如果只是数据库主键,自增 ID 也许足够;如果是对外订单号,可能要再做混淆或独立编号。

Locale 处理大小写要小心

字符串大小写转换不要随手用默认 Locale。某些语言环境下,大小写规则可能和英语不同,导致 key、枚举、协议字段出现异常。

更稳的写法:

String normalized = value.toLowerCase(Locale.ROOT);

这类问题不常见,但一旦遇到会很隐蔽。

文件和字符集问题要留检查点

文件上传、PrintWriter 乱码、byte 数组和 String 转换,核心都是编码边界:

  • 输入是什么编码。
  • 输出是什么编码。
  • HTTP Header 是否声明 charset。
  • 文件内容和文件名是否分别处理。
  • 日志里是否能看到原始字节或转码前后内容。

不要把乱码问题只归因于“中文不支持”,先把编码链路画出来。

实用结论

Java 工程杂项不杂,背后都是边界问题:限流区分速率和并发,日志区分运行入口,ID 区分内部和外部,大小写区分默认 Locale 和协议语义。把这些小坑沉淀成清单,后续项目会少走很多弯路。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-07-05发表,共计1168字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)