Google Code Prettify

2015年12月22日 星期二

spring db connection (xml)

  • JNDI
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <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 中設定資料庫連線的兩種方式,這兩種方式有什麼差別?
  1. JNDI 需配合在 AP Server 設定,也就是會造成對 AP Server 的相依性,JDBC 的設定方式就沒有這個缺點。在維護程式時用第二種方式,所有程式含設定都在同一個目錄下,管理非常容易,重新建置環境也容易。
  2. 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}"
/>