有啥方法可以将属性文件保留在 WildFly 的耳朵/罐子和模块之外

Posted

技术标签:

【中文标题】有啥方法可以将属性文件保留在 WildFly 的耳朵/罐子和模块之外【英文标题】:Is there any way to keep the properties file external to the ear/jars and module for WildFly有什么方法可以将属性文件保留在 WildFly 的耳朵/罐子和模块之外 【发布时间】:2021-03-20 12:14:36 【问题描述】:

我有一个应用程序,它引用了一个 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 吗?

有没有办法将属性文件保留在 ear/jars 和模块路径之外?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于有啥方法可以将属性文件保留在 WildFly 的耳朵/罐子和模块之外的主要内容,如果未能解决你的问题,请参考以下文章

Primefaces 与 Wildfly 中的 Yasson 有啥关系吗?

有啥方法可以将大约 16GB 的 SAS 文件拆分为 Python 中的多个文件/数据帧?

在 WildFly 中将 JDBC Driver 作为模块安装有啥好处

weka 中的 ClusterMembership 类有啥作用?

JBoss EAP、Wildfly、JBoss web 和 JBoss 服务器有啥区别?

Wildfly 11 Elytron - 基于属性文件的身份验证失败,未安装所需的服务