【问题标题】:How to apply DRY for Liquibase data source config and persistence.xml?如何为 Liquibase 数据源配置和 persistence.xml 应用 DRY?
【发布时间】:2014-11-19 14:39:51
【问题描述】:

我在 JBoss 中使用 liquibase 和 Java EE。我在项目中配置persistence.xml文件,指定我要使用的Data Source。

在 JBoss 配置中:

<datasources>
    <datasource jta="true" jndi-name="java:jboss/datasources/WebStoriesDS" pool-name="java:jboss/datasources/WebStoriesDS" enabled="true" use-java-context="true" use-ccm="true">
        <connection-url>jdbc:postgresql://127.0.0.1:5432/mydatabase</connection-url>
        <driver>org.postgresql</driver>
        <security>
            <user-name>postgres</user-name>
            <password>postgres</password>
        </security>
    </datasource>
    <drivers>
        <driver name="org.postgresql" module="org.postgresql">
            <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
        </driver>
     </drivers>
</datasources>

在项目的persistence.xml中:

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="PersistenceUnit">
    <jta-data-source>java:jboss/datasources/WebStoriesDS</jta-data-source>
  </persistence-unit>
</persistence>

以及项目的web.xml:

<context-param>
  <param-name>liquibase.datasource</param-name>
  <param-value>java:jboss/datasources/WebStoriesDS</param-value>
</context-param>

好吧,正如您所见,我在 JBoss 中有 1 个数据源引用,在我的项目中有 2 个引用。我将如何在此处应用 DRY 原则并在 JBoss 配置中仅使用 1 个引用,在我的项目中仅使用 1 个引用?使用属性文件保存数据源名称?

我只需要配置它,当我需要更改名称时,我只在两个地方进行更改:在我的项目和 JBoss 配置中。

【问题讨论】:

    标签: java jakarta-ee jboss web.xml liquibase


    【解决方案1】:

    标准 Liquibase 和 JPA 都要求明确列出数据源。它是一个逻辑引用,因此您可以更改数据源指向的位置而不会影响任一配置,除非您想更改数据源名称(如您列出的那样)。

    如果您想从 Liquibase 或 JPA 中删除显式引用,最简单的方法可能是继承 liquibase.integration.servlet.LiquibaseServletListener 并覆盖 getDataSource() 方法以从您的 PersitanceUnit 中查找引用并返回它。这将允许您只在persistance.xml 中指定数据源,而不再需要web.xml 中的liquibase.datasource 配置。

    【讨论】:

    • 您能否进一步详细说明为什么明确列出数据源是“逻辑引用”?有没有希望开箱即用(比如说,两种配置模式)。
    • “逻辑引用”是指您引用逻辑名称为“java:jboss/datasources/WebStoriesDS”的数据源。您可以根据需要重新配置实际的连接信息,它可能因环境而异,但 WebStoriesDS 永远不必更改。开箱即用是一种选择,但还有其他具有更高优先级的更改,因此我不会很快做到这一点。你当然可以发送一个拉取请求,我可以考虑合并它。
    猜你喜欢
    • 2013-10-30
    • 1970-01-01
    • 2017-05-20
    • 2011-03-07
    • 2011-03-17
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多