技术手记旧文整理:认证、调度、上传、缓存与 REST 接口,五组 Java 常规开发手记

技术手记栏目里有一批 Java 与 Spring Boot 的常规开发手记,写注册登录、定时任务、文件上传、缓存和 REST 接口这些日常需求。本篇把其中五篇按主题归拢,抽出解决思路与关键点,方便按需取用;完整代码见各篇原文。

一、用户认证怎么做:注册、登录与密码规则

原文《Java用户认证系统设计》用一个最简模型讲清认证的骨架:

  • 注册:用户名加密码,密码至少 8 位,含大写字母、数字和特殊字符,由 isValidPassword 方法校验;
  • 存储:演示用内存 HashMap 存用户名与密码,原文明确说明这只是演示,实际应用应使用数据库存储,并用 bcrypt 这类哈希算法存密码;
  • 登录:查 HashMap 比对密码,成功与失败用布尔值返回;原文提醒实际应用应返回更具体的错误信息,如“用户名已存在”或“密码不正确”。

注意:演示里的明文存储与内存存储不能直接用于生产,落地时要换成数据库加哈希存储。原文:Java用户认证系统设计

二、任务调度怎么做:一个能启停、能增删的调度器

原文《Java简单任务调度器实现》用三个组件搭出调度器:

  • Task 接口:只有一个 run 方法,任务都实现它;
  • Scheduler:维护任务列表,用 ScheduledExecutorService 按固定间隔执行,示例为每 1 秒执行一次;
  • 启停与增删:start 用 scheduleAtFixedRate 提交全部任务,stop 取消已提交的任务并关闭线程池;addTask 与 removeTask 动态增减任务。

适用场景:后台数据处理、定时报告生成、周期性资源清理这类固定间隔执行的任务。原文:Java简单任务调度器实现

三、文件上传怎么做:Spring Boot 分层实现

原文《Java文件上传解决方案》的技术栈是 Java 11、Spring Boot 2.x、Maven 与 Thymeleaf:

  • 配置:在 application.properties 里用 file.upload-dir=uploads/ 指定文件保存路径;
  • 页面:upload.html 放一个 enctype 为 multipart/form-data 的表单,提交到 /upload;
  • 分层:FileUploadController 接请求(MultipartFile 入参),FileStorageService 负责落盘,控制器只做转发与结果回显。

要点是职责分层:控制器收请求、服务层管存储,之后再加文件类型与大小校验都有地方放。原文:Java文件上传解决方案

四、简单缓存怎么做:带过期时间的内存缓存

原文《基于Java的简单缓存系统设计》用 ConcurrentHashMap 实现一个带过期清理的缓存:

  • 结构:CacheObject 包装缓存值与过期时间戳 expireAt,SimpleCache 用 ConcurrentHashMap 存键与包装对象;
  • 读写删:put 写入时算出过期时间,get 命中后先判断是否过期、过期则删除并返回 null,remove 直接删除;
  • 清理:构造时起一个单线程调度器,每 10 秒执行一次 cleanUp,定期清除过期条目;
  • 线程安全:底层用 ConcurrentHashMap,支持多线程环境使用。

过期判断放在读取时,并与定时清理配合,读到过期数据也不会返回脏值;原文也说明它定位是简单缓存,需要持久化要再扩展。原文:基于Java的简单缓存系统设计

五、REST 接口怎么做:以图书管理为例的 Spring Boot 实现

原文《Simple RESTful API with Spring Boot》以管理图书列表为例,覆盖接口的完整流程:

  • 需求:查全部图书、按 ID 查一本、新增、更新、删除五种操作;
  • 依赖:Spring Web、Spring Data JPA 与 H2 内存数据库,用 Spring Initializr 生成工程;
  • 实现:Book 实体用 JPA 注解映射数据库表,再由控制器对外提供 REST 接口。

这是从实体到接口的最小闭环,适合作为新服务的起手结构。原文:Simple RESTful API with Spring Boot

五组手记怎么搭配着用?

  • 先搭接口:用第五篇的 REST 结构起服务骨架;
  • 再补能力:认证用第一篇的思路、定时任务用第二篇、文件上传用第三篇、热点数据用第四篇的缓存;
  • 注意演示与生产的界线:五篇都是“能跑的最小实现”,明文密码、内存存储、H2 内存库这些演示设定,落地前都要按实际部署换掉。