Jboss: Using reverse path on top path: /xxx

surroundings

  1. jboss 5.2

the reason

Protocol error loading resources. In general, when loading the file, URL are to file:begin with, but when on jboss, because of its virtual path, leading to inconsistent protocol, and can not find an external configuration files.

analysis

By deploying the project to jboss server, print its log viewer URL obtained as follows:

vfsmemory://a653x1c-xfikka-k3i9k2ku-1-k3i9kk9n-2s/

The directory structure has been virtualized, the server can not be obtained in a directory structure.

External placement

After the external configuration optimization tomcat server can use, because jboss rather special, can not get the actual relative path to the server. It may be used getClass().getResource(""), relative to the current class that is used to solve.

// classpath 目录,上级目录的个数和当前类的类名层级相对应。
String path = PathDemo.class.getResource("../../").getPath();
Resource resource = new FileSystemResource(path + EXTERNAL_CONFIG_FILE);

try {

    logger.info("外部配置目录为:{}", resource.getFile().getCanonicalPath());

    if (!resource.exists()) {

        logger.info("外部配置不存在。");
        return;
    }

    ResourcePropertySource source = new ResourcePropertySource(new EncodedResource(resource, "UTF-8"));
    // 外部化配置的优先级最高
    beanFactory.getBean(StandardEnvironment.class).getPropertySources().addFirst(source);

} catch (IOException e) {

    logger.error("加载外部化配置出错。", e);
}

expand

If you use this method, find the directory structure is completely correct, but still can not find the configuration file,
you can refer to here

appendix

Get jboss directory

logger.info("class / :{}", getClass().getResource("/"));
logger.info("class :{}", getClass().getResource(""));
logger.info("file class / :{}", getClass().getResource("/").getFile());
logger.info("file class :{}", getClass().getResource("").getFile());
logger.info("path class / :{}", getClass().getResource("/").getPath());
logger.info("path class :{}", getClass().getResource("").getPath());
logger.info("loader / :{}", getClass().getClassLoader().getResource("/"));
logger.info("loader:{}", getClass().getClassLoader().getResource(""));
logger.info("file loader / :{}", getClass().getClassLoader().getResource("/").getFile());
logger.info("file loader:{}", getClass().getClassLoader().getResource("").getFile());
logger.info("path loader / :{}", getClass().getClassLoader().getResource("/").getPath());
logger.info("path loader:{}", getClass().getClassLoader().getResource("").getPath());
logger.info("thread /: {}", threadLoader.getResource("/"));
logger.info("thread : {}", threadLoader.getResource(""));
logger.info("file thread /: {}", threadLoader.getResource("/").getFile());
logger.info("file thread : {}", threadLoader.getResource("").getFile());
logger.info("path thread /: {}", threadLoader.getResource("/").getPath());
logger.info("path thread : {}", threadLoader.getResource("").getPath());

The corresponding output

 class / :vfsmemory://a653x1c-xfikka-k3i9k2ku-1-k3i9kk9n-2s/
 class :vfszip:/DATA/app/jboss/appdeploy/demo.war/WEB-INF/classes/jiangbo/demo/
 file class / :/
 file class :/DATA/app/jboss/appdeploy/demo.war/WEB-INF/classes/jiangbo/demo/
 path class / :/
 path class :/DATA/app/jboss/appdeploy/demo.war/WEB-INF/classes/jiangbo/demo/
 loader / :vfsmemory://a653x1c-xfikka-k3i9k2ku-1-k3i9kk9n-2s/
 loader:vfsmemory://a653x1c-xfikka-k3i9k2ku-1-k3i9kk9n-2s/
 file loader / :/
 file loader:/
 path loader / :/
 path loader:/
 thread /: vfsmemory://a653x1c-xfikka-k3i9k2ku-1-k3i9kk9n-2s/
 thread : vfsmemory://a653x1c-xfikka-k3i9k2ku-1-k3i9kk9n-2s/
 file thread /: /
 file thread : /
 path thread /: /
 path thread : /

Guess you like

Origin www.cnblogs.com/jiangbo44/p/11953601.html