我想使用與Java的聯合連接(因爲每個線程創建一個連接的代價很高),所以我使用的是MysqlConnectionPoolDataSource()
對象。我堅持跨線程數據源。所以,我只使用一個數據源在整個這樣的應用程序:我正確使用Java PooledConnections嗎?
startRegistry(); // creates an RMI registry for MySQL
MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource();
dataSource.setUser("username");
dataSource.setPassword("password");
dataSource.setServerName("serverIP");
dataSource.setPort(3306);
dataSource.setDatabaseName("dbname");
InitialContext context = createContext(); // Creates a context
context.rebind("MySQLDS", dataSource);
現在,我有我的數據源創建的,我做的每個單獨的線程執行以下操作:
PooledConnection connect = dataSource.getPooledConnection();
Connection sqlConnection = connect.getConnection();
Statement state = sqlConnection.createStatement();
ResultSet result = state.executeQuery("select * from someTable");
// Continue processing results
我猜我很困惑的是打電話給dataSource.getPooledConnection();
這是真的獲取一個彙集連接?這是線程安全嗎? 我注意到PooledConnection有像notify()和wait()這樣的方法......這意味着我不認爲它正在做我認爲它正在做的事情......
此外,何時以及如何釋放連接?
我想知道是否它會更有利於推出自己的產品,因爲那樣我會更加熟悉一切,但在這種情況下我並不想重新發明輪子。
Thanks SO
所有Java類都有通知和等待,因爲它們是從java.lang.Object繼承的。但是,實際使用它們是非常罕見的。 –
是的,我有點新的Java哈哈......我給它一個旋轉 – Polaris878
這是一個來自Apache DBCP的例子:http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/ DOC/PoolingDataSourceExample.java?view = co –