最常用且稳妥的方式是添加JVM参数-Djava.security.egd=file:/dev/./urandom,因OpenJDK 8u212前版本会校验路径并回退至/dev/random,加./可绕过校验;启动时在java命令后、-jar前加入该参数,支持Tomcat、Spring Boot、Kubernetes等多种场景。

直接加 JVM 参数 -Djava.security.egd=file:/dev/./urandom 就行,这是最常用、最稳妥的配置方式。
为什么是 /dev/./urandom 而不是 /dev/urandom
OpenJDK 某些版本(尤其是 8u212 及之前)会对 /dev/urandom 做路径校验,识别为“不安全”而自动 fallback 回 /dev/random。加上 ./ 是一种绕过校验的惯用写法,本质仍是访问 urandom 设备,但能确保参数被正确采纳。
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
怎么加这个参数
- 启动 Java 应用时,在 java 命令后、-jar 或主类名之前加入:
java -Djava.security.egd=file:/dev/./urandom -jar app.jar - Tomcat:在
catalina.sh的JAVA_OPTS或CATALINA_OPTS中追加该参数 - Spring Boot:可在
application.properties里通过spring-boot-maven-plugin的jvmArguments配置,或直接在启动脚本中传入 - Kubernetes:在容器 spec 的
env或args中设置 JVM 参数(如使用java -D... -jar形式)
验证是否生效
启动后检查日志或线程堆栈,若不再卡在 SecureRandom.nextBytes() 或 NativePRNG.engineNextBytes,基本说明已切换成功。更直接的方式是:
- 在应用内打印:
System.getProperty("java.security.egd"),应输出file:/dev/./urandom - 观察系统熵值变化:执行
cat /proc/sys/kernel/random/entropy_avail,只要大于 100,urandom 就能稳定供数,不会阻塞
其他可选方案(不推荐优先使用)
- 修改
$JAVA_HOME/jre/lib/security/java.security文件,把securerandom.source=file:/dev/random改成file:/dev/./urandom—— 容器环境通常不可写,且多实例共享 JRE 时易冲突 - 代码中显式指定算法,例如
SecureRandom.getInstance("SHA1PRNG")或SecureRandom.getInstance("NativePRNGNonBlocking")—— 仅影响当前实例,无法覆盖数据库驱动、SSL 初始化等底层调用
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










