Tomcat

為 Tomcat Webapp 配置數據庫屬性

  • August 6, 2019

我在 Tomcat 中設置了一個範例應用程序,但無法使數據庫連接正常工作。它是用 Spring 框架編寫的標準 WAR 包,使用 MySQL 數據庫。

該應用程序是來自http://www.cumulogic.com/downloads/sample-applications/的Granny 地址簿

我已經將它部署在tomcat/webapps/(Tomcat 7.0.42 和 MySQL 5.1.73 在同一主機上執行。)

  • Mysql 數據庫名稱:grannydb
  • JNDI 名稱:MySqlGBDS

我找不到放置數據庫連接設置的位置,因為它沒有通常的database.properties文件。對數據庫設置的唯一參考是granny.xml

<database>
 <engine>MySQL-5.5.27</engine>
 <no-of-nodes>1</no-of-nodes>
 <storage>10</storage>
 <config>
   <master-username>demo</master-username>
   <master-password>demodemo</master-password>
   <port>3306</port>
   <character-set>UTF-8</character-set>
 </config>       <external-host></external-host>
</database>

但是這個文件沒有打包在 webapp 中(它是單獨提供的),並且它缺少數據庫主機名。

我嘗試放置granny.xml在 webapp 下,WEB-INF/classes/META-INF/spring/但無法連接到數據庫。

目前行為是 webapp 正在啟動但catalina.out警告:

WARN : org.hibernate.cfg.SettingsFactory - Could not obtain connection
to query metadata org.apache.tomcat.dbcp.dbcp.SQLNestedException:
Cannot create JDBC driver of class '' for connect URL 'null'

應該granny.xml放在哪裡?

還缺少什麼?

(是的,我已經在 MySQL 中創建了數據庫和使用者。應用程序沒有創建任何表。)

server.xml如果它使用 JNDI,您需要在或中設置數據庫連接context.xml

作為管理員,最好在 中設置數據庫連接server.xml,否則您最終會在每次部署之前解壓和打包 WAR 文件。

打開 server.xml。應該有一個名為GlobalNamingResources. 在這裡您添加您的數據庫連接。

<Resource auth="Container" 
         driverClassName="com.mysql.jdbc.Driver" 
         factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
         jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"  
         validationQuery="/* ping */"
         testOnBorrow="true"
         name="jdbc/MySqlGBDS" 
         username="<username>"
         password="<password>" 
         type="javax.sql.DataSource" 
         url="jdbc:mysql://<ipaddress>/grannydb" /> 

希望這可以幫助。

引用自:https://serverfault.com/questions/751303