03 12月 2008

Tomcat 6 DataSource Configuration

很久沒用Tomcat當Server(?),主要是因為Tomcat都只拿來當Prototype用,而且其他的設定幾乎都在Spring裡就設完,突然要手動設個DataSource都要看參考文件看半天。DataSource的設定大約分為2類,第一種是僅供單一Context使用旳,另一種是可以供所有Context使用的全域DataSource,其它Ap Server幾乎都是僅有第二種,我也比較傾向採用第二種類型的設定,不過Tomcat 6在設定全域的DataSource後,shutdown時都會hold住無法直接結束,老要用kill process的方式清除… DataSource會用到的設定只有3個 (1)<Resource>:設定DataSource用的Connection Pool相關參數
<Resource auth="Container" 
    name="jdbc/TestDB" 
    type="javax.sql.DataSource" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/test?autoReconnect=true" 
    username="root" 
    password="abcd" 
    logAbandoned="true" 
    maxActive="10" 
    maxIdle="3" 
    maxWait="1000" 
    poolPreparedStatements="true" 
    removeAbandoned="true" 
    removeAbandonedTimeout="60" 
    testOnBorrow="true" 
    validationQuery="SELECT 1"/>
(2)<ResourceLink>:如果採用全域式的設定,在要使用DataSource的Context中加入ResourceLink的設定才能正確取得該DataSource。
<ResourceLink 
    global="jdbc/TestDB" 
    name="jdbc/TestDB" 
    type="javax.sql.DataSource"/>
(3)<resource-ref>:正常而言要在web.xml中加這個設定,不過tomcat中實測可以不用。。。
<resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
</resource-ref>
一、單一Context設定 只要在server.xml或單獨的context.xml中的<Context>加入<Resource 。。。>即可 二、全域Context設定 在server.xml中的&lt;GlobalNamingResources>中加入<Resource 。。。>再針對要使用該DataSource的Context中加入<ResourceLink 。。。> Tomcat6的設定是較之前其他版本要容易些,但是為何shutdown時會hang住?Log中也沒看到什麼特別奇怪的訊息。。。難不成又是mac惹的禍?

沒有留言: