JBoss Wildfly - 部署是临时文件。属性呢?

JBoss Wildfly - deployment are temporary files. What about properties?

我正在处理一个 Java 项目,我遇到了 Wildfly 10 的部署问题。我没有在其文档中找到解决方案,希望得到一些帮助。


当我部署 .WAR 时,Wildfly 创建了一个临时文件夹来存储分解的文件:

./standalone/tmp/vfs/temp/tempb75b67d7adb84a3d/web.war-47f6d3d54946006d/

一旦我用 /etc/init.d/wildfly stop 停止 Wildfly,所有这些临时文件都会立即从磁盘中删除。

问题:

WAR 包含管理员必须 modified/configured 默认的 .properties 文件。由于每次部署都会删除文件,因此目前无法做到这一点。

问题:

WildFly 支持解压缩(分解)部署。查看 $JBOSS_HOME/standalone/deployments/README.txt 了解详情。基本上,您可以将 WAR 解压缩到一个子目录并添加一个标记文件以部署它。

但是,任何依赖于给定主机环境的配置信息都不应该放在 WAR 中。 WAR 是一个 compile-time 工件,在 run-time 应该被视为不可变的。 (一些 Web 容器解压缩 WAR 并公开其内部结构这一事实是您永远不应依赖的实现细节。)

相反,您可以通过系统属性、环境变量、JNDI 条目等定义配置数据。

我经常使用 WildFly 的一个非常简单的方法是 -P 选项:

cd $JBOSS_HOME/bin
./standalone.sh -P myconfig.properties

其中 myconfig.properties 是一个简单的 Java 属性文件。 WildFly 在其 start-up 阶段很早就读取此文件并将所有属性设置为系统属性。

作为系统属性,这些配置项将对所有 部署可见,只要您控制部署到服务器的内容,这应该不是问题。为避免不同部署的属性之间发生冲突,您可以为 属性 键使用特定于部署的前缀,例如

app1.jdbc.url = jdbc:postgresql://localhost/app1
app2.jdbc.url = jdbc:postgresql://localhost/app2