我正在使用带有 Eclipse 的 Tomcat 7 编写一个带有 Struts 3 的 Web 应用程序。当我启动 Tomcat 时,上下文似乎被加载了两次(日志文件显示 applicationContext.xml 被读取了两次)。
我在 src/main/webapp/META-INF 下有一个 Tomcat 的 context.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/dbname" docBase="dbname" reloadable="true" debug="1">
<Resource name="jdbc/dbname"
username="dbusername"
password="dbpassword"
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbname"
type="javax.sql.DataSource"
initialSize="5"
maxActive="120"
maxIdle="5"
maxWait="5000"
poolPreparedStatements="true"
validationQuery="select 1" />
</Context>
我的 server.xml 还声明(在主机和引擎下):
<Context docBase="dbname" path="/dbname" source="org.eclipse.jst.jee.server:dbname"/>
没有这个,Tomcat 不会启动应用程序。
在 web.xml 中,我像这样声明 contextConfigLocation:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
applicationContext.xml 位于 src/main/resources/spring 下
这些是显示重新加载的日志文件中的两行:
2012-10-14 00:17:08,191 INFO [org.springframework.web.servlet.DispatcherServlet] - FrameworkServlet 'name': initialization completed in 438 ms
2012-10-14 00:17:10,972 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Closing WebApplicationContext for namespace 'name-servlet': startup date [Sun Oct 14 00:17:07 CEST 2012]; parent: Root WebApplicationContext
问题是在第二次重新加载时,它失败了,因为 Spring 找不到任何数据源(尽管肯定定义了一个,因为 Spring 在第一次启动时找到了它)