2

我正在使用带有 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 在第一次启动时找到了它)

4

3 回答 3

3

我在 src/main/webapp/META-INF 下有一个用于 Tomcat 的 context.xml 文件:[...]

我的 server.xml 还声明(在主机和引擎下):

因此,您已经部署了两次 webapp。你期待不同的东西吗?

从 server.xml 中删除<Context>:它不属于那里。然后,你的 webapp 应该只加载一次。

于 2012-10-15T12:12:31.287 回答
1

我在我的 tomcat 服务器中部署了战争和爆炸战争,因此它正在加载两个应用程序上下文,删除其中一个解决了问题

于 2013-03-19T16:53:27.763 回答
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>
于 2020-02-18T06:03:33.420 回答