spa*_*uny 18 java singleton design-patterns
Java中创建单例的最佳方法是什么?数据库连接应该是单例(单例是否是自动线程安全的)?因为理论上DB不能同时被许多用户访问.
Dav*_*ave 27
DB连接通常不应该是Singleton.
两个原因:
而不是这样做考虑数据库池.该池是共享的(如果需要,可以是单例).当您需要进行数据库工作时,您的代码会这样做:
getConnectioFromPool();
doWork()
closeConnection() // releases back to pool
Run Code Online (Sandbox Code Playgroud)
示例池库:
创建单例的最佳方法(截至目前)是枚举单例模式(Java enum singleton)
我怀疑单例对于数据库连接来说是必要的还是有任何价值的。您可能需要一些惰性创建:根据第一次请求创建连接并缓存,进一步的请求将使用缓存的实例来填充:
public ConnectionProvider {
private Connection conn;
public static Connection getConnection() {
if (conn == null || conn.isClosed()) {
conn = magicallyCreateNewConnection();
}
return conn;
}
}
Run Code Online (Sandbox Code Playgroud)
(不是线程安全的 - 如果需要的话进行同步)