数据库连接应该是单例吗?
2022-09-01 15:37:02
在 Java 中创建单例的最佳方式是什么?数据库连接应该是单例(作为单例,它会自动实现线程安全)?因为理论上数据库不能同时被许多用户访问。
在 Java 中创建单例的最佳方式是什么?数据库连接应该是单例(作为单例,它会自动实现线程安全)?因为理论上数据库不能同时被许多用户访问。
数据库连接通常不应是单例连接。
原因有二:
与其这样做,不如考虑数据库池。游泳池是共用的(如果你愿意,可以是单身)。当你需要做数据库工作时,你的代码会这样做:
getConnectioFromPool();
doWork()
closeConnection() // releases back to pool
示例池库:
创建单例的最佳方式(截至今天)是枚举单例模式(Java 枚举单例))
我怀疑,单例对于数据库连接是必要的,或者没有任何价值。您可能希望创建一些延迟:在第一次需求时创建连接并进行缓存,进一步的请求将被缓存的实例填满:
public ConnectionProvider {
private Connection conn;
public static Connection getConnection() {
if (conn == null || conn.isClosed()) {
conn = magicallyCreateNewConnection();
}
return conn;
}
}
(不是线程安全的 - 如果需要,同步)