我正在使用liquibase和Java EE与JBoss。我在项目中配置persistence.xml
文件以指定我想要使用的数据源。
在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个引用?使用属性文件来保存数据源名称?
我只需要以一种方式配置它,当我需要更改名称时,我只在2个地方更改:在我的项目和JBoss配置中。
答案 0 :(得分:0)
标准Liquibase和JPA都要求明确列出数据源。它是一个逻辑参考,因此您可以更改数据源指向的位置,而不会影响任何配置,除非您要更改数据源名称(如您所列)。
如果您想要从Liquibase或JPA中删除显式引用,最简单的可能是子类liquibase.integration.servlet.LiquibaseServletListener
并覆盖getDataSource()
方法以查找PersitanceUnit的引用并将其返回。这将允许您仅在persistance.xml中指定数据源,并且不再需要web.xml中的liquibase.datasource配置。