JPAとLiquibaseの両方を持っている:それらの設定ファイルをどうするか?

Aug 22 2020

私のプロジェクトはJPAのみで開始され、Springはありません。後で、Liquibaseを追加しましたが、使用できるようにするには永続性ユニット名が必要なため、永続性ユニット名に問題がありましたEntityManager

entityManagerFactory = Persistence.createEntityManagerFactory("MyPU");

そのため、Liquibaseを使用してテーブルの作成を続行し、JPAを使用してデータベースに永続化できるように、同じデータベース構成を維持しているにもかかわらずpersistence.xmlliquibase.propertiesファイルとファイルの両方を保持しました。

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
             version="2.2">
    <persistence-unit name="MyPU">
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/jpa_specialist?createDatabaseIfNotExist=true&amp;useTimezone=true&amp;serverTimezone=UTC"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="root"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>
changeLogFile=src/main/resources/META-INF/database/dbchangelog.xml
url=jdbc:mysql://localhost/jpa_specialist?createDatabaseIfNotExist=true&useTimezone=true&serverTimezone=UTC
username=root
password=root

調べてみましたが、よくliquibase-hibernateわかりませんでしたが、diffファイルの生成に使われているようで、今のところ必要ありません。

両方のファイルが必要ですか?そのうちの1つだけにするために私にできることはありますか?

回答

1 NathanVoxland Oct 19 2020 at 15:01

Liquibaseには、presistence.xmlファイルからurl / username / password情報を直接読み取る方法がありません。liquibase-hibernate拡張機能は、データベースをJavaファイルマッピングファイルと比較するためのサポートを追加しますが、LiquibaseがURL /ユーザー名/パスワードを取得する方法は変更しません。

Springを使用していないとのことですが、まだWebアプリケーションを使用している場合は、Liquibaseサーブレットリスナーを使用して、事前構成されたデータソースから接続をプルするLiquibaseを実行できます。JPAは、構成を再定義する代わりに、同じ事前構成されたデータソースからプルすることができます。

それ以外の場合は、persistence.xmlファイルを解析してLiquibaseに渡すために少しカスタムJavaコーディングを行う必要がない限り、両方のファイルが必要です。

繰り返しを避けるために、maven / gradle / whateverセットアップでビルドプロパティを定義<property name="javax.persistence.jdbc.url" value="${database.url}"/>し、persistence.xmlソースファイルとurl: ${database.url}liquibase.propertiesファイルに含めるようなことを行うことができます。