我有一个 Web 应用程序无法在 Linux 安装的 Tomcat 中启动。该应用程序可以在不同机器上的不同 Tomcat 上工作,也可以在同一台机器上使用独立 Tomcat 工作。
该问题似乎是由于 Tomcat 的启动方式造成的。
service tomcat8 start
通过包管理器安装 Tomcat 时使用失败;/etc/init.d/tomcat8 start
通过包管理器安装 Tomcat 时使用失败;- 使用独立的 tomcat 并以
service tomcat8 start
(已修改的/etc/init.d/tomcat8
) 启动失败; - 使用独立的 tomcat 并开始使用
./startup.sh
工作。
我正在使用 Debian 8、Tomcat 8.0.11(但尝试过 8.0.9 和 8.0.11)和各种版本的 Java。应用程序因名为阿托米克斯。错误是:
严重:向类 uk.co.prodia.talkingcouch.ApplicationContextListener 的监听器实例发送上下文初始化事件时发生异常 org.springframework.beans.factory.BeanCreationException:在类路径资源 [config/applicationContext-db-sessionfactory.xml] 中定义名称为“transactionManager”的 bean 时出错:设置 bean 属性“transactionManager”时无法解析对 bean“atomikosTransactionManager”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [config/applicationContext-db-sessionfactory.xml] 中定义名称为“atomikosTransactionManager”的 bean 时出错:调用 init 方法失败;嵌套异常是 javax.transaction.SystemException:事务服务未在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)上运行,在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)上运行,在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)上运行
有没有人有什么建议?
答案1
通常管理脚本从脚本本身、/etc/tomcat8 中的文件甚至 /etc/default/tomcat(8) 读取附加属性
确保从 startup.sh 和管理脚本发出的带有参数的命令导致相同的调用。
您可以尝试获取参数 ps -fp cat /proc//cmdline
答案2
TheCodeKiller 让我思考的方向正确。这最终是一个权限问题,我自己的实例只能在 处运行,并且以 的身份运行。通过比较每个正在运行的进程的输出,root
这一点显而易见。ps
Atomikos 正在将其日志文件写入只有 root 可写入的$CATALINA_BASE
位置。/var/lib/tomcat8
事实证明,Atomikos 改变了处理日志的方式,因此我必须:
- 删除了该属性
com.atomikos.icatch.output_dir
; - 已删除该属性
com.atomikos.icatch.log_base_dir
。
然后将以下内容添加到log4j.xml
:
<appender name="tc-core-atomikos" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/stroage/www/tc/data/atomikos/tmout"/>
<param name="MaxFileSize" value="1MB"/>
<param name="MaxBackupIndex" value="5"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="tc-core-atomikos => [log level: %-5p] [thread: %t] [%d{dd MMM yyyy HH:mm:ss}]%n %c %M%n %m%n%n"/>
</layout>
</appender>
<logger name="com.atomikos">
<level value="ERROR"/>
<appender-ref ref="tc-core-atomikos"/>
</logger>