首页 > 解决方案 > 有什么方法可以将属性文件保留在 WildFly 的耳朵/罐子和模块之外

问题描述

我有一个应用程序,它引用了一个 MY_ PRODUCT_CONF_DIR/mycustom.properties 文件,该文件有一些键值对,这些键值对需要在我的 WildFly 上部署的 ear、war 或 jars 外部。在 Jboss 6.1.0 的早期版本中。我们以一种棘手的方式做到了。jboss 6.1.0 有一组 URL,对加载服务器的 CL 可见。

例如(https://repository.jboss.org/org/jboss/jbossas/jboss-as-distribution/6.1.0.Final/,参考 jboss-6.1.0.Final-src\main\src\main\ java\org\jboss\Main.java )

  // Define a Set URLs to have visible to the CL loading the Server
  final Set<URL> urls = new HashSet<URL>();
  ..........
  urls.add(new File(MY_ PRODUCT_CONF_DIR)).toURI().toURL());   // I have added the DIR 

  .........
  // Make a ClassLoader to be used in loading the server
  final URL[] urlArray = urls.toArray(new URL[]{});
  final ClassLoader loadingCl = new URLClassLoader(urlArray, tccl);

  // Load the server
  server = JBossASServer.class.cast(ServerFactory.createServer(DEFAULT_AS_SERVER_IMPL_CLASS_NAME, loadingCl));

在我的代码中,我从 ClassLoader 读取了属性文件

URLClassLoader ucl = (URLClassLoader) loader;
url = ucl.findResource(propertiesResource);
final InputStream inputStream = url.openStream();
..........

那么,有没有办法保留这个机制呢?我可以在 ModuleClassLoader 中添加我的 CONFIG_DIR 作为 URLClassLoader 吗?

有没有办法将属性文件保留在耳朵/罐子和模块路径之外?

标签: jbosswildflywildfly-8jboss6.x

解决方案


您可以将属性文件放在模块中并以这种方式加载它,而无需使用 URLClassLoader 来获取 getResource 或 getInputStream 。另一种方法是在某些系统属性中指定属性文件的路径,然后执行 Properties.load(Files.newInputStream(myPath))


推荐阅读