无法在类路径上加载属性文件; [java,jboss,maven,spring]

时间:2017-08-03 14:56:06

标签: java spring maven jboss classpath

我有一个名为app.properties的属性文件,它正确放在src / main / resources / app.properties中。

在WAR文件中,它正确位于\ WEB-INF \ classes。

在我的本地环境(Windows)中的独立模式和Linux测试服务器上的独立模式下,WAR文件启动时正确读取我的属性文件。

在另一台Linux服务器上的Jboss Domain模式下,使用完全相同的WAR文件,我得到错误文件找不到app.properties。确实存在。

除了域模式是两个服务器之间的差异之外,第一个测试服务器jboss安装在root下并以root身份运行。另一台服务器作为具有读取和执行访问权限的用户运行。

我已经用print语句彻底调试了代码并且我99%确定它不是代码问题,任何想法在jboss域模式下可能导致无法读取属性文件的问题类路径?

提前致谢。

代码的相关部分

MutablePropertySources sources = new MutablePropertySources();
sources.addLast(getEncryptablePropertiesSource(new ClassPathResource("app.properties")));

部分方法

private EncryptablePropertiesPropertySource getEncryptablePropertiesSource(Resource propsResource) throws IOException{
    //don't use file system resource because property files may be in a jar
    System.out.println(">>>> in getEncryptablePropertiesSource filename is :");
    System.out.println(propsResource.getFilename());
    System.out.print(">>>> URL is: ");      
    System.out.println(propsResource.getURL());

最后一次System out print语句在第二个测试环境中抛出错误,不会在任何其他环境中引起问题。

1 个答案:

答案 0 :(得分:0)

如果您的ClassPathResource是来自Spring的课程:

  

公共类ClassPathResource扩展了AbstractFileResolvingResource

     

类路径资源的资源实现。使用给定的   ClassLoader或用于加载资源的给定类。

     

如果类路径资源所在,则支持解析为java.io.File   在文件系统中,但不适用于JAR中的资源。始终支持   分辨率为URL。

因此,我认为你不能在你的情况下使用它。 您是否尝试过使用以下方法之一?