单身不适合获得JDBC连接吗? 连接池的任何良好实现?

我使用单例模式为我的独立应用程序获取jdbc连接。 代码如下。

public static synchronized MysqlConnect getDbCon() { if ( db == null ) { db = new MysqlConnect(); } return db; } 

但是我在很多讨论中都看到单身不利于连接。 这是真的吗? 并建议使用连接池。 任何人都可以给我一个很好的连接池实现,而不是上面的代码?

这是一个简单的,基于单例的连接池实现。 此连接池支持使用DriverManager接口或通过DataSource(JNDI)获取连接。

我为我的一些项目使用此连接池(尽管实际实现稍微复杂一些)

 public class ConnectionPool{ private String jdbcDriver; private String jdbcURL; private String user; private String password; private int connectionCount=10; private List connections; private static boolean loadFromDataSource; private static DataSource dataSource; private static ConnectionPool connPool; private ConnectionPool() throws EasyORMException{} private void setConnection(String jdbcDriver, String jdbcURL, String user, String password,String dbDataSource) throws EasyORMException{ this.jdbcDriver = jdbcDriver; this.jdbcURL=jdbcURL; this.user=user; this.password=password; connections= new ArrayList(); connections.add((ConnectionPool.loadFromDataSource) ? getConnectionFromDataSource() : getConnection()); } static ConnectionPool getInstance(){ return connPool; } private static ConnectionPool getInstanceFromJndi(String propertyFile,boolean loadFromJndi) throws EasyORMException{ ConnectionProp cp=readPropFromFile(propertyFile); if(loadFromJndi){ dataSource=createDatasource(cp.getDataSource()); loadFromDataSource=true; } return ConnectionPool.createConnectionPool(cp.getJdbcDriver(),cp.getDbURL(), cp.getUsername(), cp.getPassword(),cp.getDataSource()) } public static ConnectionPool getInstance(String propertyFile,boolean loadFromJndi) throws EasyORMException{ return ConnectionPool.getInstanceFromJndi(propertyFile, loadFromJndi, false); } public static ConnectionPool getInstance(ConnectionProp cp) throws EasyORMException{ return ConnectionPool.createConnectionPool(cp.getJdbcDriver(),cp.getDbURL(), cp.getUsername(), cp.getPassword(),cp.getDataSource()); } public static ConnectionPool getInstance(String jndiName) throws EasyORMException{ dataSource=createDatasource(jndiName); loadFromDataSource=true; return ConnectionPool.createConnectionPool(null,null, null, null,jndiName); } public static ConnectionPool getInstance(String jdbcDriver, String jdbcURL, String user, String password) throws EasyORMException{ return ConnectionPool.createConnectionPool(jdbcDriver,jdbcURL, user, password,null); } private static ConnectionPool createConnectionPool(String jdbcDriver, String jdbcURL, String user, String password,String dbDataSource) throws EasyORMException{ if(connPool==null) { connPool = new ConnectionPool(); connPool.setConnection(jdbcDriver, jdbcURL, user, password, dbDataSource); } return connPool; } synchronized Connection getAvailableConnection() throws EasyORMException { Connection conn=null; int connSize = connections.size(); if(connSize>0){ conn=connections.remove(connSize-1); }else{ if(connSize 

有些方法没有公共访问权限(因为它们是作为库的一部分编写的),但如果需要,可以将它们更改为公共。