SSH 專案使用 Tomcat 7,conf/context.xml 設定的 JNDI 資料源,啟動 Tomcat 後設定消失,導致資料庫連線失敗。
conf/context.xml(專案內 META-INF/context.xml 優先級較高)。conf/context.xml 重置。META-INF/context.xml,且依賴伺服器全域設定,遷移環境時遺失。conf/context.xml 定義 Resource<Resource name="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"
username="dbuser"
password="dbpass"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8"
validationQuery="SELECT 1"
testOnBorrow="true" />
web.xml 宣告 resource-ref<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/MyDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
tomcat/lib(或專案 WEB-INF/lib)tomcat/lib:mysql-connector-java-5.1.x.jar(或 8.x)。<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/MyDB" />
<property name="proxyInterface" value="javax.sql.DataSource" />
</bean>
conf/context.xml、web.xml、server.xml 納入專案 Git 管理(或 Dockerfile/Ansible 腳本)。<Context>
<ResourceLink name="jdbc/MyDB" global="jdbc/MyDB" type="javax.sql.DataSource" />
</Context>