網頁

2018/3/27

Spring Tomcat JNDI Datasource配置

Spring使用Tomcat JNDI Datasource的配置如下,連結的資料庫為MySQL 5,7。

開啟Tomcat的context.xml(可在tomcat安裝目錄下的conf目錄中找到。),並在<Context>下加入<Resource>設定連線。底下的設定為對本機的MySQL中名為TestDB的資料庫進行連線。

範例使用的MySQL jdbc driver為6.06,所以driverClassName="com.mysql.cj.jdbc.Driver",如果是5.x版則用原本的driverClassName="com.mysql.jdbc.Driver"即可。

url後接的參數用&amp;區隔是因為xml不能使用XML entity例如&,必須改用entity code代替。

<Context>
    ...
    <Resource name="jdbc/TestDB"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="com.mysql.cj.jdbc.Driver" 
              url="jdbc:mysql://localhost:3306/TestDB?serverTimezone=CST&amp;useUnicode=true&amp;characterEncoding=UTF-8"
              username="matthung"
              password="12345"
              maxTotal="100" 
              maxIdle="20" 
              maxWaitMillis="10000" 
              minIdle="5"/>
              
</Context>

在Spring配置檔中將JNDI設為datasouce,使用<jee:jndi-lookup/>。注意jndi-name的名稱即為<Resouce>name名稱,如果名稱不一致則Spring會找不到而發生javax.naming.NameNotFoundException例外
javax.naming.NameNotFoundException: Name [xxx] is not bound in this Context. Unable to find [jdbc].

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/jee 
                           http://www.springframework.org/schema/jee/spring-jee.xsd">

  ...
  <!-- 取得Tomcat JNDI Datasource -->
  <jee:jndi-lookup id="dataSource" 
                   jndi-name="jdbc/TestDB" 
                   proxy-interface="javax.sql.DataSource"/>
  
  ...
</beans>

如果本篇有幫助到您,幫忙點一下廣告支持,感恩。


參考:

沒有留言:

張貼留言