我在 Tomcat 中设置了一个示例应用程序,但无法使数据库连接正常工作。这是一个用 Spring 框架编写的标准 WAR 包,使用 MySQL 数据库。
该应用程序是奶奶通讯录从http://www.cumulogic.com/downloads/sample-applications/。
我已经将其部署在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/
但是无法连接到数据库。
当前行为是 Web 应用程序正在启动但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 中创建了数据库和用户。应用程序没有创建任何表。)
答案1
如果它使用 JNDI,则需要在 或 中设置数据库server.xml
连接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" />
希望这可以帮助。