我正在研究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值?
最佳答案
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