![](/img/trans.png)
[英]Java application server connection pooling for different databases on same server
[英]Database Connection pooling in a Java application running under JBOSS application server
我試圖了解在JBOSS下部署的Java應用程序中的數據庫連接池。 順便說一句,數據庫連接沒有問題。 在JBOSS應用程序服務器中設置數據庫連接池,如下所示:
<datasource jta="false" jndi-name="java:/testDS" pool-name="testDS" enabled="true" use-java-context="true">
<connection-url>jdbc:oracle:thin:@xxx</connection-url>
<driver>oracle</driver>
<pool>
<min-pool-size>2</min-pool-size>
<max-pool-size>15</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>admin</user-name>
<password>admin</password>
</security>
</datasource>
然后,我的Java代碼即可獲得連接,如下所示:
String jndiName = "java:/testDS";
InitialContext jndiCntx = new InitialContext();
DataSource ds = (DataSource) jndiCntx.lookup(jndiName);
Connection connection = ds.getConnection();
上面的代碼是否使用connectionpool? 如果是,以下代碼的目的是什么? 我有點困惑。 這兩個代碼段之間有什么區別?
InitialContext jndiCntx = new InitialContext();
ConnectionPoolDataSource cpds = (ConnectionPoolDataSource) jndiCntx.lookup(jndiName);
PooledConnection pc = cpds.getPooledConnection();
Connection connection = pc.getConnection();
如果您查看由ConnectionPoolDataSource返回的PooledConnection( http://docs.oracle.com/javase/7/docs/api/javax/sql/PooledConnection.html )上的JavaDoc,您可以閱讀:
應用程序程序員不直接使用PooledConnection接口;而是直接使用PooledConnection接口。 相反,它由管理連接池的中間層基礎結構使用。
當應用程序調用方法DataSource.getConnection時,它將獲取一個Connection對象。 如果完成連接池,則該Connection對象實際上是PooledConnection對象的句柄,該對象是物理連接。
數據源的典型用法如下所示:
@Stateless
public class MyBean {
@Resource(lookup = "java:/testDS")
private DataSource dataSource;
public void testDatasource() {
try (Connection connection = dataSource.getConnection()) {
// use the connection
} catch (SQLException e) {
throw new SomeRuntimeException(e);
}
}
}
重要的是使用后請關閉連接。 最好的方法是嘗試自動關閉。 否則,您的服務器將用盡連接。
使用“ @Statless”啟動事務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.