问题:
我在2个不同的工作区中签出了同一个Maven项目。导入日食。清洗了建造它们。发布到Tomcat。
启动服务器时,一种设置能够找到log4j路径(类似于Linux)。另一个确切的设置无法找到路径并引发以下错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'log4jInitialization' defined in URL [jar:file:/D:/apache-tomcat-7.0.50-old/wtpwebapps/DevCom-War/WEB-INF/lib/DevCom-Remittance-1.1.0-SNAPSHOT.jar!/config/applicationContext.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: Log4j config file [/home/deployment/devcom/config/devCom_log4j.properties] not found
如果我在
D:
的/home/deployment/devcom/config/devCom_log4j.properties
前面添加devCom.properties
,则其他设置只能识别该路径,并且不会引发错误。为什么第一个设置能够识别和使用类似Linux的路径
第二种设置没有?
在所有相关实体中,问题可能出在哪里?
Eclipse,Maven,Tomcat,SVN Eclipse插件...?
eclipse中的Tomcat配置:(使用Tomcat安装)
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -Xms712m -Xmx712m -XX:PermSize=256m -XX:MaxPermSize=356m -Dcatalina.base="D:\apache-tomcat-7.0.50-old" -Dcatalina.home="D:\apache-tomcat-7.0.50-old" -Dwtp.deploy="D:\apache-tomcat-7.0.50-old\wtpwebapps" -Djava.endorsed.dirs="D:\apache-tomcat-7.0.50-old\endorsed" -Dext.prop.dir="D:\home\deployment" -Denv.prop="dev"
弹簧配置:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>file:///${ext.prop.dir}/devcom/config/devCom.properties</value>
</property>
<property name="ignoreUnresolvablePlaceholders">
<value>true</value>
</property>
</bean>
<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="org.springframework.util.Log4jConfigurer"/>
<property name="targetMethod" value="initLogging"/>
<property name="arguments">
<list>
<value>${log4j.config.location}</value>
<value>${log4j.refresh.interval}</value>
</list>
</property>
</bean>
D:\ home \ deployment \ devcom \ config \ devCom.properties:
log4j.config.location = /home/deployment/devcom/config/devCom_log4j.properties
(请注意linux之类的路径。)
log4j.refresh.interval = 100000
项目详情:
Windows 10
JDK 8
春季3.0.5
雄猫7
马文
蚀火星
Log4jConfigurer的初始化日志记录:
public static void initLogging(String location, long refreshInterval) throws FileNotFoundException {
String resolvedLocation = SystemPropertyUtils.resolvePlaceholders(location);
File file = ResourceUtils.getFile(resolvedLocation);
if (!file.exists()) {
throw new FileNotFoundException("Log4j config file [" + resolvedLocation + "] not found");
}
}
文件已存在():
public boolean exists() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(path);
}
if (isInvalid()) {
return false;
}
return ((fs.getBooleanAttributes(this) & FileSystem.BA_EXISTS) != 0);
// first setup -> 3 & 1. second setup -> 0 & 1 !!! What does it mean? How does it work?
}
最后,
getBooleanAttributes
方法如何工作?缩小此问题的根源是否会有帮助?谢谢。
最佳答案
FileSystem
的getBooleanAttributes
返回:
返回表示的文件或目录的简单布尔属性
给定的抽象路径名;如果不存在,则返回零
发生其他I / O错误
这意味着它返回read: 4
,write: 2
和execute: 1
的总和(例如,所有三个均可用,表示7)。
我希望您的第二个安装程序在Windows下能够正常运行,这是指定absolute
路径的预期方式。
我建议您尝试找出两种环境之间的配置差异:配置选项,用户权限,文件系统访问等