1
2
3
4
5
6
7
8
| Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException;
nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException:
Property 'transactionTimeout' threw exception; nested exception is com.atomikos.icatch.SysException:
Error in init(): Log already in use?
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1147)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
|
今天突然发生了这奇怪的事情,前两天服务器还很好,今天就抛出这个异常了.
首先,想起来同事曾经遇到过Log already in use
的问题,是因为同一个项目启动了两次,检查服务器后发现就启动了一次,不是这个原因.还有一个重点,我本机(MacBook)和同事的机器(windows)启动都没有这个问题,就服务器(linux)会有.
马上去Google,网上说法总结为两个原因:
- 一个项目,已经启动了,再次启动的时候报错.
- 同一个环境中存在多个这种使用jta的项目,启动第二/三/四…个的时候.
- 解决办法:为每个项目配置使用不同的log文件,如下
jta.properties
1
2
3
| #项目一
com.atomikos.icatch.console_file_name = rm1.out
com.atomikos.icatch.log_base_name = rmlog1.log
|
jta.properties
1
2
3
| #项目二
com.atomikos.icatch.console_file_name = rm2.out
com.atomikos.icatch.log_base_name = rmlog2.log
|
但是,经过尝试,均无法解决问题.然后尝试本机搜索了一下rmlog2.log
,结果发现在resin根目录下有.就去服务器看,结果没有.马上脑洞大开,会不会是因为权限??
结果,“what f*ck”,就是权限的问题.因为昨天同事把resin目录的普通用户的写权限给禁用了.
解决办法:配置log文件为绝对路径(要有权限)
jta.properties
1
2
3
4
5
6
| com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
com.atomikos.icatch.output_dir=/data/logs/xxx/
com.atomikos.icatch.log_base_dir=/data/logs/xxx/
com.atomikos.icatch.console_file_name = tm.out
com.atomikos.icatch.log_base_name = tm.log
com.atomikos.icatch.max_timeout = 300000
|