我已经使用Spring-MVC快速启动原型创建了两个Spring-MVC应用程序(包括Spring-MVC、Spring-security、hibernate),我可以在tomcat上单独运行每个应用程序,但不能一起运行。
当我把这两个项目都添加到Tomcat上时,服务器将不会出现,我得到
Aug 30, 2013 8:14:48 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'appServlet'
然后下一行是红色文本错误,如下所示,然后服务器被终止
Exception in thread "main"
我在logback.xml上启用了Spring日志级别的DEBUG,它用DEBUG和INFO编写了一堆日志消息,但没有用WARN或ERROR显示内部发生的事情。
有没有人克服了这一点并找到了解决方案?
按照建议添加日志
Sep 13, 2013 8:20:24 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:ProgramsJavajdk1.7.0_21bin;C:WindowsSunJavabin;C:Windowssystem32;C:Windows;C:/Programs/Java/jdk1.6.0_32/bin/../jre/bin/server;C:/Programs/Java/jdk1.6.0_32/bin/../jre/bin;C:/Programs/Java/jdk1.6.0_32/bin/../jre/lib/amd64;c:Python27;C:ProgramsJavajdk1.6.0_32bin;C:Programsapache-maven-3.0.4bin;c:Programsmongodb243bin;C:Program FilesCommon FilesMicrosoft SharedWindows Live;C:Program Files (x86)Common FilesMicrosoft SharedWindows Live;C:oraclexeapporacleproduct10.2.0serverbin;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:Program Files (x86)Windows LiveShared;C:Programseclipse-jee-juno -with-SpringToolSuit;;.
Sep 13, 2013 8:20:24 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:shows' did not find a matching property.
Sep 13, 2013 8:20:24 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:com.maha.science.web' did not find a matching property.
Sep 13, 2013 8:20:24 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-7080"]
Sep 13, 2013 8:20:24 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-7009"]
Sep 13, 2013 8:20:24 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 705 ms
Sep 13, 2013 8:20:25 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep 13, 2013 8:20:25 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.25
Sep 13, 2013 8:20:31 AM org.apache.catalina.core.ApplicationContext log
INFO: Spring WebApplicationInitializers detected on classpath: [com.maha.science.config.WebAppInitializer@c2854c7]
Sep 13, 2013 8:20:31 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Sep 13, 2013 8:20:35 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'appServlet1'
Exception in thread "main"
Venkat,
您需要为每个应用程序指定不同的根密钥。
如果您使用XML配置,那么使用Karthikenyan的方法,在每个web.XML中指定不同的值:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>thisisdistinctforeachwebapp</param-value>
</context-param>
如果您使用的是无XML配置(实现WebApplicationInitializer),那么它就像一行代码一样简单:
servletContext.setInitParameter("webAppRootKey", "thisisdistinctforeachwebapp");
HTH
经过一段时间的努力,这个问题终于得到了解决,我写的这篇文章对我来说很有效,希望它能在类似的情况下帮助其他人。
在使用logback、xml进行实验时已经提供了更多关于实际错误的信息
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
at java.util.concurrent.FutureTask.get(FutureTask.java:111)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:293)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
看起来web应用程序中充斥着hibernate、spring和其他库,存在permgen空间问题,所以我在服务器中添加了VM参数,如下所示
-XX:MaxPermSize=128m
双击服务器并打开启动配置,在VM参数部分添加上面的参数,这很神奇。
我已经恢复了之前为appServlet提供唯一servlet名称的更改,并删除了作为上下文参数的唯一webAppRootKey,它仍然有效。
总之,只要我们将XX:MaxPermSize=128m param设置为服务器启动,我们就可以在一台tomcat服务器上运行从同一个maven快速启动创建的多个Web应用程序,而不会出现任何问题。