Java 在Wildfly中配置已部署应用程序的数据源,无需修改persistence.xml
我在部署应用程序时使用的当前工作流是在wildfly中创建一个JDBC数据源,然后将该数据源添加到persistence.xml文件中 是否有任何方法可以在不修改persistence.xml的情况下设置应用程序在运行时使用的数据源Java 在Wildfly中配置已部署应用程序的数据源,无需修改persistence.xml,java,wildfly,wildfly-10,Java,Wildfly,Wildfly 10,我在部署应用程序时使用的当前工作流是在wildfly中创建一个JDBC数据源,然后将该数据源添加到persistence.xml文件中 是否有任何方法可以在不修改persistence.xml的情况下设置应用程序在运行时使用的数据源 这个问题的关键是试图理解如何在构建时消除应用程序与部署环境之间的任何耦合。最简单的解决方案是创建数据源,然后将其设置为默认数据源。然后,您甚至不需要在persistence.xml中设置数据源 例如,以下CLI命令将创建数据源并设置默认数据源(java:comp/D
这个问题的关键是试图理解如何在构建时消除应用程序与部署环境之间的任何耦合。最简单的解决方案是创建数据源,然后将其设置为默认数据源。然后,您甚至不需要在
persistence.xml
中设置数据源
例如,以下CLI命令将创建数据源并设置默认数据源(java:comp/DefaultDataSource
)
然后在
persistence.xml
中,只需删除
标记。它可以用于单个应用程序,但会产生类似的问题,就像我在项目中指定数据源一样。我试图使应用程序和数据源名称彼此不知道,并从应用程序部署中删除表命名注意事项。不幸的是,这可能会导致表命名冲突并强制实施另一种紧耦合。这不是一个很好的答案,但您可能正在寻找一个*-ds.xml部署描述符。这些文档不是最好的,但您可以在这里看到一个示例。ds部署更糟糕,因为它不仅坚持我试图避免的紧密耦合,而且引入了额外的部署复杂性。我想现在的问题是我想做的事情是否可行。也许当时我只是不理解这个问题。在某些时候,您必须知道数据源的JNDI名称是什么。这是在什么时候?应用程序的JNDI名称将在部署时选择。其思想是让一个应用程序没有指定JNDI名称,并且本质上与每个应用程序都有默认数据源的行为相同。正如我所说,这可能是不可能的,但由于有一种能力可以让多个应用程序使用一个全局默认值,我认为这可以单独完成。
embed-server
# Configure the driver
/subsystem=datasources/jdbc-driver=org.postgresql:add(driver-name=org.postgresql, driver-module-name=org.postgresql, driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
# Configure the data source
/subsystem=datasources/data-source=postgresql:add(driver-name=org.postgresql, jndi-name="java:/jdbc/PostgresDS", enabled=true, connection-url="jdbc:postgresql://localhost/testdb", user-name=user, password="password")
# Change the default data source name java:comp/DefaultDataSource
/subsystem=ee/service=default-bindings:write-attribute(name=datasource, value=java:/jdbc/PostgresDS)
stop-embedded-server