最近項目上遇到一個問題
場景是:應用程序主機和數據庫主機不在同一個網段(只能通過公網的方式進行訪問),各自主機外圍都有各自防護牆。此種情況,可能帶來,數據庫連接問題,而導致程序更新不成功。
1)方式一數據連接,採用tocmat的配置的數據源。(連接斷,容易出錯,導致數據庫操作失敗)
<Resource
name="DS_TEST"
type="javax.sql.DataSource"
password="123456"
driverClassName="oracle.jdbc.OracleDriver"
maxIdle="10"
maxWait="3000"
validationQuery=""
username="dbtest"
url="jdbc:oracle:thin:@*.*.*.*:1521:TEST"
maxActive="50"/>
2)方式二c3p0連接池的方式。(數據池,有嘗試連接,建議採用)
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<!--當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數。Default: 3 -->
<property name="acquireIncrement">3</property>
<!--定義在從數據庫獲取新連接失敗後重復嘗試的次數。Default: 30 -->
<property name="acquireRetryAttempts">30</property>
<!--兩次連接中間隔時間,單位毫秒。Default: 1000 -->
<property name="acquireRetryDelay">1000</property>
<!--當連接池用完時客戶端調用getConnection()後等待獲取新連接的時間,超時後將拋出 SQLException,如設爲0則無限期等待。單位毫秒。Default: 0 -->
<property name="checkoutTimeout">1000</property>
<!--每60秒檢查所有連接池中的空閒連接。Default: 0 -->
<property name="idleConnectionTestPeriod">30</property>
<!--初始化時獲取三個連接,取值應在minPoolSize與maxPoolSize之間。Default: 3 -->
<property name="initialPoolSize">5</property>
<!--最大空閒時間,60秒內未使用則連接被丟棄。若爲0則永不丟棄。Default: 0 -->
<property name="maxIdleTime">60</property>
<!--連接池中保留的最大連接數。Default: 30 -->
<property name="maxPoolSize">30</property>
</default-config>
</c3p0-config>