【问题标题】:Configure data source of deployed app in Wildfly without modifying persistence.xml在 Wildfly 中配置已部署应用的数据源,无需修改 persistence.xml
【发布时间】:2017-09-05 23:31:03
【问题描述】:

我在部署应用程序时使用的当前工作流程是在 wildfly 中创建一个 JDBC 数据源,然后将该数据源添加到 persistence.xml 文件中。

有没有办法在不修改persistence.xml的情况下设置应用程序在运行时使用的数据源?

这个问题的关键是试图了解如何在构建时消除应用程序与部署环境之间的任何耦合。

【问题讨论】:

    标签: java wildfly wildfly-10


    【解决方案1】:

    最简单的解决方案是创建数据源,然后将其设置为默认数据源。那么你甚至不需要在你的persistence.xml中设置数据源。

    例如,以下 CLI 命令将创建数据源并设置默认数据源 (java:comp/DefaultDataSource)。

    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
    

    然后在persistence.xml 中删除<jta-data-source> 标签。

    【讨论】:

    • 它适用于单个应用程序,但它会产生类似的问题,就像我在项目中指定数据源一样。我试图让应用程序和数据源名称彼此不知道,并从应用程序部署中删除表命名注意事项。不幸的是,这可能会导致表命名冲突并强制执行另一种类型的紧密耦合。
    • 这不是一个很好的答案,但您可能正在寻找 *-ds.xml 部署描述符。 access.redhat.com/documentation/en-US/…。该文档不是最好的,但您可以在此处查看示例 github.com/wildfly/quickstart/blob/11.x/kitchensink/src/main/…
    • ds 部署更糟糕,因为它不仅坚持我想要避免的紧密耦合,而且引入了额外的部署复杂性。我认为现在的问题是我想要做的事情是否可行。
    • 也许我只是不理解这个问题。在某些时候,您必须知道数据源的 JNDI 名称将是什么。那是什么时候?
    • 应用程序的 JNDI 名称将在部署时选择。这个想法是让一个应用程序没有指定 JNDI 名称,并且基本上与每个应用程序的默认数据源相同的行为。就像我说的那样,这可能是不可能的,但由于可以让多个应用程序使用全局默认值,我想它可以单独完成。
    猜你喜欢
    • 2015-07-20
    • 2015-12-22
    • 2013-10-30
    • 1970-01-01
    • 2013-09-03
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多