使用一个 war 文件部署的两个 glassfish 应用程序,在不同的数据库上运行

Two glassfish applications deployed with one war file, operating on different databases

我有一个 Netbeans 项目,我从中构建了一个 .war 文件。我现在在我的 glassfish 服务器上部署了那个 war 文件的两个实例,每个实例都有不同的上下文根,例如mydomain.com/abcmydomain.com/def

这工作正常,但它们仍在同一个数据库上运行,因为我在 persistence.xmlglassfish-resources.xml.

中声明了持久性单元

我的 glassfish-resources.xml 文件:

...
<jdbc-resource  enabled="true"
                jndi-name="jdbc/abc"
                object-type="user"
                pool-name="abcPool">
    <description/>
</jdbc-resource>

<jdbc-connection-pool
    ...
    name="abcPool"
    ...
    <property name="URL" value="jdbc:mysql://localhost:3306/abc"/>
    ...
</jdbc-connection-pool>

我的 persistence.xml 文件:

...
<persistence-unit name="abcPU" transaction-type="JTA">
    <jta-data-source>jdbc/abc</jta-data-source>
    ...
</persistence-unit>
...

有没有人有关于如何让一个 war 文件的两个实例在两个不同的数据库上运行的解决方案?

有没有办法为每个应用程序上传不同的 glassfish-resources.xmlpersistence.xml,覆盖打包的?

如果可能的话,在应用程序部署后更改 glassfish 域管理控制台中的模块描述符是可以接受的。

如果需要glassfish域管理控制台的屏幕截图,请在评论中写下,我会添加。

提前致谢!

在服务器级别设置两个指向不同数据库的数据源并转到应用程序实例并修改指向特定数据源的资源引用。

我认为最简单的方法是拥有两个不同的构建。

基本上您可以创建两个不同的 .war 文件。每个都有不同的 persistence.xml 文件。一个指向 JDBC 资源 ABC,另一个指向 JDBS 资源 DEF。

像 gradle+Jenkins 这样的构建工具可能会支持你。

如果您搜索如何创建具有不同配置的测试系统与生产系统的构建,您会发现很多关于类似任务的信息。这是一个很常见的任务。

这里可能是您要查找的内容的起点: Create multiple .WAR files with different dependencies in Gradle