- JNDI
<property name="jndiName">
<value>java:comp/env/jdbc/xxxxx</value>
</property>
<property name="lookupOnStartup" value="false"/>
<property name="cache" value="true"/>
<property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>
- JDBC
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" />
上面是 spring framework 中設定資料庫連線的兩種方式,這兩種方式有什麼差別?
- JNDI 需配合在 AP Server 設定,也就是會造成對 AP Server 的相依性,JDBC 的設定方式就沒有這個缺點。在維護程式時用第二種方式,所有程式含設定都在同一個目錄下,管理非常容易,重新建置環境也容易。
- JNDI 提供 connection pool,JDBC 則沒有! 所以,在營運的正式環境上,一般不會採用 JDBC 的方式,因為太沒效率了! JDBC 的設定方式也有它適用的地方,就是用在單元測試! 在進行單元測試時,AP Server 通常是沒有啟動,沒辦法透過 JNDI 的方式建立資料庫連線,JDBC 的方式就派上用場了!
要同時滿足以上兩種方法的優點,不被 AP Server 束縛,又有 connection pool,可以如下設定: (下載)
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}"
/>