应用上下文加载两次

时间:2012-10-14 00:17:30

标签: spring tomcat

我正在使用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在第一次启动时发现了一个肯定是定义的)

3 个答案:

答案 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>