我正在使用Tomcat 7和Eclipse一起编写Struts 3的Web应用程序。当我启动Tomcat时,似乎上下文被加载两次(日志文件显示applicationContext.xml被读取两次)。
我在Tomcat的src / main / webapp / META-INF下有一个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也声明(在Host和Engine下):
<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在第一次启动时发现了一个肯定是定义的)
答案 0 :(得分:3)
我在Tomcat的src / main / webapp / META-INF下有一个context.xml文件: [...]
我的server.xml也声明(在Host和Engine下):
所以,你已经两次部署了你的webapp。你期待不同的东西吗?
从server.xml中删除<Context>
:它不属于那里。然后,您的webapp应该只加载一次。
答案 1 :(得分:1)
我在我的tomcat服务器中部署了战争和爆炸战争,因此它正在加载两个应用程序上下文,删除其中一个解决了问题
答案 2 :(得分:0)
为防止这种情况,我们必须在标记中设置autoDeploy =” false”和deployOnStartup =” false”:
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="false" deployOnStartup="false">
<Context path="" docBase="ExampleApp"></Context>
<!-- Further settings for localhost -->
</Host>