是否可以在 Quarkus 应用程序属性中部分覆盖 persistence.xml?
Is it possible to override persistence.xml partially in Quarkus application properties?
我正在将一个 JEE / JBOSS 项目迁移到 Quarkus。
在这个项目中,我有一个由许多 EJB(SOAP 服务、REST 服务)共享的 DAO。 DAO 还像这样定义实体和 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="broGmw">
<jta-data-source>java:jboss/datasources/BroDS</jta-data-source>
<class>x</class>
<class>y</class>
<!--> many more <-->
<properties>
<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect" />
<property name="hibernate.show_sql" value="false" />
</properties>
</persistence-unit>
</persistence>
现在,我知道 quarkus 还不支持 jta 数据源。
我不想在我的 JEE 项目的每个端点 EJB 中重新定义相同的 persistence.xml。此外,从 DAO 库中删除它感觉不合逻辑,因为 persistence.xml 在逻辑上属于 DAO。
但是,Quarkus 不允许使用 jta-data-source。所以我只想在应用程序属性中重新定义数据源,将 persistence.xml 留在 DAO(库)中。
quarkus.datasource.broDs.db-kind=other
quarkus.datasource.broDs.username=xxx
quarkus.datasource.broDs.password=yyy
quarkus.datasource.broDs.jdbc.url=myUrl
quarkus.datasource.broDs.jdbc.driver=${QUARKUS-BRO-DATASOURCE-DRIVER:oracle.jdbc.OracleDriver}
quarkus.hibernate-orm.broGmw.dialect=${QUARKUS-ORM-DIALECT:org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect}
quarkus.hibernate-orm.broGmw.log.sql=${QUARKUS-ORM-LOG-SQL:false}
#quarkus.hibernate-orm.broGmw.packages=... (here's where I want the content of my persistence.xml read)
quarkus.hibernate-orm.broGmw.datasource=broDs
然而,当 Quarkus 发现 persistence.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:00 min
[INFO] Finished at: 2021-01-14T22:28:38+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.10.5.Final:build (default) on project gmw_rest_dispatch: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR] [error]: Build step io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor#build threw an exception: java.lang.UnsupportedOperationException: Value found for #getJtaDataSource : not supported yet
[ERROR] at io.quarkus.hibernate.orm.runtime.boot.LightPersistenceXmlDescriptor.verifyIgnoredFields(LightPersistenceXmlDescriptor.java:164)
[ERROR] at io.quarkus.hibernate.orm.runtime.boot.LightPersistenceXmlDescriptor.validateAndReadFrom(LightPersistenceXmlDescriptor.java:55)
[ERROR] at io.quarkus.hibernate.orm.runtime.boot.QuarkusPersistenceUnitDefinition.<init>(QuarkusPersistenceUnitDefinition.java:34)
我如何实现这一点?
从依赖项中过滤 persistence.xml 或许也是一种选择。我知道这在下一个版本的 Quarkus 中是可能的,但也许有一种通用机制可以从依赖项中过滤文件(类、xml)以使 Quarkus 忽略它们。
SKIP_PARSE_PERSISTENCE_XML
属性 必须在您 运行 Quarkus 应用程序时传递,而不是在构建它时传递。
将其传递给 quarkus-maven-plugin
无济于事。
它需要作为 -D
属性 添加到 Maven 构建中,在 IDE 中配置,并在 CI/CD.[=13= 中可能的构建脚本中配置]
我正在将一个 JEE / JBOSS 项目迁移到 Quarkus。
在这个项目中,我有一个由许多 EJB(SOAP 服务、REST 服务)共享的 DAO。 DAO 还像这样定义实体和 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="broGmw">
<jta-data-source>java:jboss/datasources/BroDS</jta-data-source>
<class>x</class>
<class>y</class>
<!--> many more <-->
<properties>
<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect" />
<property name="hibernate.show_sql" value="false" />
</properties>
</persistence-unit>
</persistence>
现在,我知道 quarkus 还不支持 jta 数据源。
我不想在我的 JEE 项目的每个端点 EJB 中重新定义相同的 persistence.xml。此外,从 DAO 库中删除它感觉不合逻辑,因为 persistence.xml 在逻辑上属于 DAO。
但是,Quarkus 不允许使用 jta-data-source。所以我只想在应用程序属性中重新定义数据源,将 persistence.xml 留在 DAO(库)中。
quarkus.datasource.broDs.db-kind=other
quarkus.datasource.broDs.username=xxx
quarkus.datasource.broDs.password=yyy
quarkus.datasource.broDs.jdbc.url=myUrl
quarkus.datasource.broDs.jdbc.driver=${QUARKUS-BRO-DATASOURCE-DRIVER:oracle.jdbc.OracleDriver}
quarkus.hibernate-orm.broGmw.dialect=${QUARKUS-ORM-DIALECT:org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect}
quarkus.hibernate-orm.broGmw.log.sql=${QUARKUS-ORM-LOG-SQL:false}
#quarkus.hibernate-orm.broGmw.packages=... (here's where I want the content of my persistence.xml read)
quarkus.hibernate-orm.broGmw.datasource=broDs
然而,当 Quarkus 发现 persistence.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:00 min
[INFO] Finished at: 2021-01-14T22:28:38+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.10.5.Final:build (default) on project gmw_rest_dispatch: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR] [error]: Build step io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor#build threw an exception: java.lang.UnsupportedOperationException: Value found for #getJtaDataSource : not supported yet
[ERROR] at io.quarkus.hibernate.orm.runtime.boot.LightPersistenceXmlDescriptor.verifyIgnoredFields(LightPersistenceXmlDescriptor.java:164)
[ERROR] at io.quarkus.hibernate.orm.runtime.boot.LightPersistenceXmlDescriptor.validateAndReadFrom(LightPersistenceXmlDescriptor.java:55)
[ERROR] at io.quarkus.hibernate.orm.runtime.boot.QuarkusPersistenceUnitDefinition.<init>(QuarkusPersistenceUnitDefinition.java:34)
我如何实现这一点?
从依赖项中过滤 persistence.xml 或许也是一种选择。我知道这在下一个版本的 Quarkus 中是可能的,但也许有一种通用机制可以从依赖项中过滤文件(类、xml)以使 Quarkus 忽略它们。
SKIP_PARSE_PERSISTENCE_XML
属性 必须在您 运行 Quarkus 应用程序时传递,而不是在构建它时传递。
将其传递给 quarkus-maven-plugin
无济于事。
它需要作为 -D
属性 添加到 Maven 构建中,在 IDE 中配置,并在 CI/CD.[=13= 中可能的构建脚本中配置]