在Java SE应用程序中使用连接池有哪些优缺点?

时间:2012-03-18 02:21:59

标签: java oracle11g connection-pooling

我们正在开发Java SE应用程序,我正在使用Hibernate与数据库进行通信。我的数据库是Oracle 11g Express Edition。到目前为止,我还没有在应用程序中使用连接池。但我之前使用过c3p0连接池,但我从来没有真正理解它。

在Java SE应用程序中使用c3p0的优点和缺点是什么?我可以理解它对Java EE应用程序有用但是Java SE?

这是我的Hibernate配置。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
  <property name="hibernate.connection.username">EP</property>
  <property name="hibernate.connection.password">123</property>
  <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
  <property name="hibernate.default_schema">EP</property>
  <property name="show_sql">true</property>

  <property name="hibernate.c3p0.min_size">5</property>
  <property name="hibernate.c3p0.max_size">20</property>
  <property name="hibernate.c3p0.timeout">300</property>
  <property name="hibernate.c3p0.max_statements">50</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>

  <mapping class="app.model.User"></mapping>
</session-factory>
</hibernate-configuration>

2 个答案:

答案 0 :(得分:4)

  

我可以理解它对Java EE应用程序有用但是Java SE?

在Java SE中使用连接池的原因是与Java EE案例中的基本相同。。打开和关闭JDBC连接相对昂贵,连接池允许您重用应用程序之前打开的连接。

(显然,如果Java SE应用程序只需要使用一个(或少量)JDBC连接,那么使用连接池就没有任何回报。但这同样适用于Java EE应用程序相同的特征。)


  

是的,但Java SE应用程序是否有必要一次拥有多个连接?

1)这完全取决于应用程序及其功能。

2)连接池对于需要串行连接多个连接的应用程序也很有用......但是一次只能连接一个连接。例如,如果正在第三方库中创建和关闭连接。

答案 1 :(得分:0)

有没有人意识到Java EE应用程序都运行在相同的Java SE JVM和一些插件库上?这就是说,Java EE应用程序需要使其作为Java SE应用程序工作的库,或者换句话说: 所有EE容器都是Java SE应用程序。

在已经注意到连接池与SE或EE无关之前,它更多地基于应用程序应该做的事情。