僅使用struts開發時,我們可以利用struts-config.xml文件來配置連接數據庫的配置信息。(但不提倡這樣做,建議使用第三方的數據庫連接池等)
但是如果如上述做了,那么應該注意一個問題:
首先,在eclipse中為web項目添加struts支持時,并不能將數據源連接時所需的三個重要jar包自動導入,這三個jar包分別是:
(1) commons-dbcp-1.2.1.jar(或commons-dbcp-1.1.jar)
(2) commons-pool-1.2.jar(或commons-pool-1.1.jar)
(3) struts-legacy.jar
如果你的WEB-INF/lib/下沒有這三個包,則在啟動web服務器時會顯示:
。。。。Marking servlet action as unavailable。
javax.servlet.UnavailableException: Initializing application data source XXXXX
等一堆異常。
因為無法加載數據庫需要的文件,數據源連接不通,這樣在後續需要使用與數據庫連接的地方都會出錯,爲了避免這樣的情況,struts會默認停止所有與action有關的serverlet
只要加入上面的三個包,就一切ok咯~
还需要注意的是:如果WEB-INF/lib/下没有commons-collections-3.2.jar也会出错
struts-config中这样配置:
<data-source key="BBS_DS" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="autoCommit" value="false" />
<set-property property="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<set-property property="maxCount" value="4" />
<set-property property="minCount" value="2" />
<set-property property="password" value="designer" />
<set-property property="url" value="jdbcracle:thin:@localhost:1521:SID" />
<set-property property="username" value="designer" />
</data-source>
========================================
(1)。单数据源配置
如果系统中只有一个数据源的情况下:
以下以 PostgreSQL 为例,配置文件如下,
<data-sources>
<data-source>
<set-property property="type" value="javax.sql.DataSource" />
<set-property property="driverClass" value="org.postgresql.Driver" />
<set-property property="url" value="jdbc:postgresql://DBServer:5432/DBName" />
<set-property property="maxCount" value="20" />
<set-property property="minCount" value="2" />
<set-property property="user" value="userName" />
<set-property property="password" value="userPassword" />
</data-source>
</data-sources>
在Action中调用:
DataSource ds = this.getDataSource(request);
这样就可以取得以上配置的数据源,然后再取连接。
注意:
A.上述的数据源取得方法只适用于配置了单个数据源。
B.连接用后一定要调用 close()方法,以将连接返回连接池中,已备重用。
(2)。多数据源配置
多数据源配置中,在 Easy-Struts 和其他的图形化配置工具中,目前都有问题,主要是 Struts 配置文件的 DTD 已经改过。
以下再提供 MySQL 数据源和 PostgreSQL 数据源为例,参见配置如下:
<data-sources>
<data-source>
<set-property property="key" value="postDS" />
<set-property property="type" value="javax.sql.DataSource" />
<set-property property="driverClass" value="org.postgresql.Driver" />
<set-property property="url" value="jdbc:postgresql://DBServer:5432/DBName" />
<set-property property="maxCount" value="20" />
<set-property property="minCount" value="2" />
<set-property property="user" value="userName" />
<set-property property="password" value="userPassword" />
</data-source>
<data-source>
<set-property property="key" value="mysqlDS" />
<set-property property="type" value="javax.sql.DataSource" />
<set-property property="driverClass" value="com.mysql.jdbc.Driver" />
<set-property property="url" value="jdbc:mysql://DBServer:3306/DBName" />
<set-property property="maxCount" value="20" />
<set-property property="minCount" value="2" />
<set-property property="user" value="userName" />
<set-property property="password" value="userPassword" />
</data-source>
</data-sources>
在Action中调用:
//MySQL 数据源取得
DataSource mysqlds = this.getDataSource(request,"mysqlDS");
//PostgreSQL 数据源取得
DataSource postds = this.getDataSource(request,"postDS");
连接的使用和注意事项同(1)。
有些书籍中不建议在 Action 中直接调用数据源,我觉得未尝不可。
本人已经做过压力测试,在Action中进行对数据库的频频操作,
当有 500 用户在线压力 30 分钟,未见任何异常。
测试,