避免jdbc硬编码配置的核心是将数据库连接信息(url、用户名、密码、驱动类名)移至外部properties文件(如db.properties),通过classloader加载,并封装为jdbcutils工具类;生产环境需禁用git提交、改用环境变量或secret管理密码,且url须使用真实ip并补全必要参数。

避免 JDBC 中的硬编码配置,核心是把数据库连接信息(URL、用户名、密码、驱动类名)从 Java 源码里移出去,交由外部统一管理。这样既能提升安全性,又便于多环境切换和团队协作。
用配置文件分离敏感信息
最常用且推荐的做法是将连接参数写入 properties 文件(如 db.properties),再通过类加载器读取:
- 在
src/main/resources下创建db.properties,内容示例:
db.username=app_user
db.password=StrongPass2026
db.driver=com.mysql.cj.jdbc.Driver
- Java 中用
ClassLoader或ResourceBundle加载:
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
Properties props = new Properties();
props.load(in);
String url = props.getProperty("db.url");
String user = props.getProperty("db.username");
String pass = props.getProperty("db.password");
Class.forName(props.getProperty("db.driver"));
Connection conn = DriverManager.getConnection(url, user, pass);
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
使用工具类封装连接逻辑
把加载配置、获取连接、关闭资源等操作封装进一个静态工具类(如 JDBCUtils),业务代码只需调用 JDBCUtils.getConnection() 和 JDBCUtils.close(rs, ps, conn) 即可:
- 静态代码块中完成驱动加载和配置初始化,避免每次连接都重复读取
- close 方法内部自动判空 + 捕获 SQLException,防止因关闭异常掩盖主逻辑错误
- 后续若引入连接池(如 Druid、HikariCP),只需修改 getConnection() 实现,上层代码零改动
生产环境建议补充安全措施
配置文件本身仍含明文密码,需进一步防护:
- 禁止将
db.properties提交到 Git:加入.gitignore,改用部署时注入 - 优先使用环境变量或启动参数传入密码(如
-Ddb.password=xxx),代码中用System.getProperty("db.password")获取 - 容器化部署时,可通过 Secret 挂载配置,或使用 Spring Boot 的
spring.config.import动态加载外部配置 - 绝对不要用 Base64 或简单加密“掩耳盗铃”——解密逻辑和密钥必然存在于客户端,毫无实际防护意义
远程连接注意 URL 写法
硬编码不仅指密码,也包括写死的 localhost:
- 开发时用
localhost可以,但上线必须改为服务器真实 IP(如192.168.1.100) - 确保 MySQL 配置允许该 IP 访问:
bind-address = 0.0.0.0或具体 IP,并授权用户:CREATE USER 'app_user'@'%' IDENTIFIED BY 'pwd'; GRANT SELECT,INSERT ON mydb.* TO 'app_user'@'%'; - JDBC URL 补全端口与必要参数,例如:
jdbc:mysql://192.168.1.100:3306/mydb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










