JBoss Wildfly - 部署是临时文件。物业怎么样?

时间:2016-01-25 09:10:27

标签: java deployment jboss wildfly

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

当我部署 .WAR 时,Wildfly会创建一个临时文件夹来存储爆炸文件:

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

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

问题:

WAR包含默认的 .properties 文件,必须由管理员修改/配置。由于每次部署都会删除文件,因此目前无法实现。

问题:

  • 有没有办法让Wildfly将 .WAR 部署到永久文件夹(类似于Apache Tomcat)?
  • 考虑到客户希望将此 .WAR 部署到Debian Cloud基础架构,但偶尔也会部署到Windows Server,这是一个很好的J2E实践吗?
  • 我们应该考虑哪些替代方法来存储 .properties 值?

1 个答案:

答案 0 :(得分:4)

WildFly支持解压缩(爆炸)部署。有关详细信息,请查看$JBOSS_HOME/standalone/deployments/README.txt。基本上,您只需将WAR解压缩到子目录并添加标记文件即可将其部署。

但是,任何依赖于给定主机环境的配置信息都不应放在WAR中。 WAR是一个编译时工件,应该在运行时被视为不可变的。 (事实上​​,某些Web容器解压缩WAR并暴露其内部结构是一个您绝不应该依赖的实现细节。)

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

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

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

其中myconfig.properties是一个简单的Java属性文件。 WildFly在启动阶段很早就读取了这个文件,并将所有属性设置为系统属性。

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

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