**真正生效的帳密在以下位置 (優先級由高到低)**:
public class ConnDB {
// 1. 移除硬編碼,從配置讀取
private static final String URL = Config.get("db.url");
private static final String USER = Config.get("db.user");
private static final String PASS = Config.get("db.pass");
private static final String DRIVER = Config.get("db.driver", "com.mysql.cj.jdbc.Driver");
// 2. 使用 HikariCP 連線池 (單例)
private static final HikariDataSource ds = new HikariDataSource();
static {
ds.setJdbcUrl(URL);
ds.setUsername(USER);
ds.setPassword(PASS);
ds.setDriverClassName(DRIVER);
ds.setMaximumPoolSize(20);
ds.setMinimumIdle(5);
ds.setConnectionTimeout(30000);
ds.setIdleTimeout(600000);
ds.setMaxLifetime(1800000);
ds.setPoolName("MyAppPool");
}
// 3. 獲取連線 (從池取出)
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 4. 關閉資源 (歸還池)
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try { if (rs != null) rs.close(); } catch (SQLException ignore) {}
try { if (stmt != null) stmt.close(); } catch (SQLException ignore) {}
try { if (conn != null) conn.close(); } catch (SQLException ignore) {}
}
// 5. 應用關閉時關閉池
public static void shutdown() {
if (!ds.isClosed()) ds.close();
}
}
db.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
db.user=my_real_user
db.pass=my_real_password
db.driver=com.mysql.cj.jdbc.Driver
**類中帳密無效,因為專案實際用連線池/JNDI DataSource**,真正帳密在**伺服器配置 / Spring 配置 / 連線池配置檔**。解決方法:
1. 找到真實配置位置修改帳密
2. 重構 `ConnDB` 整合 HikariCP、讀取外部配置
3. 理解 **配置檔 > 程式碼** 的優先級鏈路