【发布时间】:2011-01-22 03:40:10
【问题描述】:
我想在 Java 中使用池连接(因为每个线程创建一个连接的成本很高),所以我使用了MysqlConnectionPoolDataSource() 对象。我正在跨线程保留我的数据源。因此,我在整个应用程序中只使用一个数据源,如下所示:
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() 之类的方法......这意味着我认为它没有做我认为它正在做的事情......
另外,我应该何时以及如何释放连接?
我想知道自己动手是否更有益,因为那样我会更熟悉一切,但在这种情况下我真的不想重新发明轮子:)。
非常感谢
【问题讨论】:
-
所有 Java 类都有通知和等待,因为它们是从 java.lang.Object 继承的。不过,实际使用它们非常罕见。
-
是的,我对 java 有点陌生,哈哈……我正在试一试
-
这是一个来自 Apache DBCP 的示例:svn.apache.org/viewvc/commons/proper/dbcp/trunk/doc/…
标签: java mysql database multithreading