问题:

我在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方法如何工作?缩小此问题的根源是否会有帮助?

谢谢。

最佳答案

FileSystemgetBooleanAttributes返回:


  返回表示的文件或目录的简单布尔属性
    给定的抽象路径名;如果不存在,则返回零
    发生其他I / O错误


这意味着它返回read: 4write: 2execute: 1的总和(例如,所有三个均可用,表示7)。

我希望您的第二个安装程序在Windows下能够正常运行,这是指定absolute路径的预期方式。

我建议您尝试找出两种环境之间的配置差异:配置选项,用户权限,文件系统访问等

08-05 13:09