2017-04-19 46 views
1

我想在Spring中加载文件。 该文件包含基于OpenRules引擎的规则。 问题是,当我使用Spring BootRun它正确加载。 但是,当我试图在外部Tomcat中部署相同的文件时,我收到错误FileNotFound。在外部Tomcat容器中加载文件vs Bootrun

我提的是在以下方式中的属性文件的路径:

rules.open.main.decision.path=file:rules/main/Decision.xls 

规则文件夹是直属项目文件夹。

在Java中我加载文件:

public Decision getDecisionEngine(){   
    String decisionName = "CustomerPreventStrategies"; 
    //String fileName = "file:rules/main/Decision.xls"; 
    String fileName = env.getProperty("rules.open.main.decision.path"); 
    System.out.println("rules.open.main.decision.path:"+fileName); 

    Decision decision = new Decision(decisionName,fileName); 
    return decision;  
} 

当我创造我保持它在2个位置外的Tomcat的WAR。但这并没有帮助。

war { 
    baseName = 'MyOpenRules' 
    version = '0.1.0' 
    from("rules") { 
     into("WEB-INF/classes/rules") 
     } 
    from("rules") { 
     into("rules") 
     }  
} 

我越来越:

Caused by: java.io.FileNotFoundException: rules\main\Decision.xls (The system cannot find the path specified) 
+0

经过试验和错误,我发现外部的Tomact,如果我保留**规则**文件夹下的** tomcat ** **斌**它工作正常。但无法解释为什么。 – user2110074

回答

0

尝试使用

rules.open.main.decision.path=file:/rules/main/Decision.xls 

这使得温泉从位置WEB-INF接/班/规则/主/ Decision.xml

当您使用 rules.open.main.decision.path = file:rules/main/Decision.xls 该文件预计将在当前目录中。当我们通过catalina.bat或Tomcat_HOME/bin内的startup.bat启动tomcat服务器时,bin目录是该进程的当前文件夹。因此,当你把这个文件保存在Tomcat的仓库里面的时候。

当你把/弹簧使用相对路径来查找文件。

+0

谢谢。现在我完全理解“当前目录”是如何影响外部tomcat的行为的。但将“/”放在前面并不能解决问题。我用'../ webapps/$ {name}/rules /'来解决。 – user2110074