Tomcat
為 Tomcat Webapp 配置數據庫屬性
我在 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" />
希望這可以幫助。