2012-05-25 16 views
0

我有自己的連接池:如何使用spring初始化,加載屬性並處置自己的連接池?

public final class ConnectionPool { 


private static final Logger log = Logger.getLogger(ConnectionPool.class); 

private static final int DEFAULT_POOL_SIZE = 10; 


//single instance 
private static ConnectionPool instance; 
//queue of free connections 
private BlockingQueue<Connection> connectionQueue; 

public ConnectionPool(String driver, String url, String user, 
     String password, int poolSize) 
     throws ClassNotFoundException, DAOException{ 
    try{ 
     Class.forName(driver); 
     connectionQueue = new ArrayBlockingQueue<Connection>(poolSize); 
     for(int i = 0; i < poolSize ;i++){ 
      Connection connection = DriverManager.getConnection(url, user, password); 
      connectionQueue.offer(connection); 
     } 
    } 
    catch (SQLException e) { 
     log.error(e); 
     throw new DAOException(e.getMessage()); 
    } 
} 

public static void init() throws DAOException{ 
    try { 
    if(instance == null){ 

     String driver = ConfigurationManager. 
     getInstance().getProperty(ConfigurationManager.DATABASE_DRIVER_NAME); 
     String url = ConfigurationManager. 
     getInstance().getProperty(ConfigurationManager.DATABASE_URL); 
     String user = ConfigurationManager. 
     getInstance().getProperty(ConfigurationManager.DATABASE_USER); 
     String password = ConfigurationManager. 
     getInstance().getProperty(ConfigurationManager.DATABASE_PASSWORD); 
     String poolSizeStr = ConfigurationManager. 
     getInstance().getProperty(ConfigurationManager.DATABASE_POOLSIZE); 
     int poolSize = (poolSizeStr != null) ? 
       Integer.parseInt(poolSizeStr) : DEFAULT_POOL_SIZE; 

     log.info("Trying to create pool of connections..."); 

     instance = new ConnectionPool(driver,url,user,password,poolSize); 

     log.info("Connection pool initialized"); 
    } 
    }catch (ClassNotFoundException e) { 
     log.error(e); 
    } catch (SQLException e) { 
     log.error(e); 
     throw new DAOException(e.getMessage()); 
    } 
} 

public static void dispose() throws DAOException { 
    try { 
     if(instance != null){ 
      instance.clearConnectionQueue(); 
      instance = null; 
      log.info("Connection queue is disposed"); 
     } 
    } catch (DAOException e) { 
     log.info(e.getMessage()); 
     throw new DAOException(e.getMessage()); 
    } 
} 

public static ConnectionPool getInstance(){ 
    return instance; 
} 

public Connection takeConnection() { 
    Connection connection = null; 
    try{ 
     connection = connectionQueue.take(); 
    }catch (InterruptedException e) { 
     log.info("Free connection waiting interrupted.Returned null connection"); 
     log.error(e); 
    } 
    return connection; 
} 

public static void releaseConnection(Connection connection) throws DAOException { 
    try { 

     if(!connection.isClosed()){ 
      if(!getInstance().connectionQueue.offer(connection)){ 
       log.info("Connections is not added."); 
      } 
     } 
     else{ 
      log.info("Trying to release closed connection."); 
     } 
    } catch (SQLException e) { 
     log.info("SQLException at connection isClosed(). Connection is not    added"); 
     throw new DAOException(e.getMessage()); 
    } 
} 

private void clearConnectionQueue() throws DAOException{ 
    try { 
     Connection connection; 
     while((connection = connectionQueue.poll()) != null){ 

      if(!connection.getAutoCommit()){ 
       connection.commit(); 
       connection.close(); 
      } 
    } 
    } catch (SQLException e) { 
     log.info(e.getMessage()); 
     throw new DAOException(e.getMessage()); 
    } 
} 



} 

而且我現在我初始化和使用我自己的類ConfigurationManager,與ResourceBundle連接與監聽器和負載性質摧毀它:

public final class ConfigurationManager { 

private static ConfigurationManager instance; 
private ResourceBundle resourceBundle; 
//getting info from config.properties 
private static final String BUNDLE_NAME = "config"; 
public static final String DATABASE_DRIVER_NAME = 
    "DATABASE_DRIVER_NAME"; 
public static final String DATABASE_URL = 
    "DATABASE_URL"; 
public static final String DATABASE_USER = 
    "DATABASE_USER"; 
public static final String DATABASE_PASSWORD = 
    "DATABASE_PASSWORD"; 
public static final String ERROR_PAGE_PATH = 
    "ERROR_PAGE_PATH"; 

public static final String BEAN_PATH = 
    "BEAN_PATH"; 
public static final String DATABASE_POOLSIZE = 
    "DATABASE_POOLSIZE"; 


public synchronized static ConfigurationManager getInstance() { 
    if (instance == null) { 
     instance = new ConfigurationManager(); 
     instance.resourceBundle = 
      ResourceBundle.getBundle(BUNDLE_NAME); 
    } 
    return instance; 
} 
public String getProperty(String key) { 
    return (String)resourceBundle.getObject(key); 
} 
} 

但我想使用Spring來完成它(init,destroy,properties)。那我該怎麼辦呢?

回答

相關問題