Java 当项目使用TomcatJNDI数据源查找时,如何实现Liquibase变更日志

Java 当项目使用TomcatJNDI数据源查找时,如何实现Liquibase变更日志,java,hibernate,tomcat,liquibase,Java,Hibernate,Tomcat,Liquibase,我正在从事一个项目,目前正在使用JNDI查找数据源,该文件名为jdbc\u customer.properties,位于Tomcat lib文件夹中。在我的java代码中,它被设置为获取我的PersistenceManager.java类中的jdbc\u customer.properties文件 目前我的项目运行在3个不同的数据库上,DB2、Oracle和MS SQL,很难为不同的数据库维护所有三个更新,因此我尝试使用liquibase来维护数据库版本控制 下面是处理数据库选择的Persist

我正在从事一个项目,目前正在使用JNDI查找数据源,该文件名为
jdbc\u customer.properties
,位于Tomcat lib文件夹中。在我的java代码中,它被设置为获取我的
PersistenceManager.java
类中的
jdbc\u customer.properties
文件

目前我的项目运行在3个不同的数据库上,DB2、Oracle和MS SQL,很难为不同的数据库维护所有三个更新,因此我尝试使用liquibase来维护数据库版本控制

下面是处理数据库选择的
PersistenceManager.java
代码的一部分:

private EntityManagerFactory getEntityManagerFactory(){
    Properties jdbc_cust = new Properties();
    InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc_customer.properties");
    String vendor = jdbc_cust.getProperty("OPT.dbvendor");
    if ("oracle".equals(vendor)) {
            dialect = "org.hibernate.dialect.Oracle10gDialect";
            } else if ("db2".equals(vendor)) {
                dialect = "org.hibernate.dialect.DB2Dialect";
            } else if ("mssql".equals(vendor)) {
                dialect = "org.hibernate.dialect.SQLServer2008Dialect";
            }

我现在想做的是找到一种基于正确版本的数据库在部署时运行Liquibase changelog的方法。我已经创建了3个不同版本的变更日志,如何在我的项目中正确实现它?

Liquibase变更日志中的变更集和其他标记可以标记为dbms属性,以指定它们应该应用于哪些数据库引擎。Liquibase计算出它在运行时使用的dbms,并对变更日志进行过滤,以便只考虑适用的变更

此列表列出了当前可用的dbms类型及其“短名称”: 以下示例显示了如何使用modifySql标记生成特定于平台的SQL:

<changeSet id="1" author="nvoxland">
    <createTable tableName="person">
        <column name="id" type="bigint"/>
        <column name="firstname" type="varchar(255)"/>
        <column name="lastname" type="varchar(255)"/>
    </createTable>
    <modifySql>
         <replace replace="bigint" with="long"/>
    </modifySql>
    <modifySql dbms="mysql">
         <append value=" engine innodb"/>
    </modifySql>
</changeSet>

Liquibase变更日志中的变更集和其他标记可以用dbms属性进行标记,以指定它们应该应用于哪些数据库引擎。Liquibase计算出它在运行时使用的dbms,并对变更日志进行过滤,以便只考虑适用的变更

此列表列出了当前可用的dbms类型及其“短名称”: 以下示例显示了如何使用modifySql标记生成特定于平台的SQL:

<changeSet id="1" author="nvoxland">
    <createTable tableName="person">
        <column name="id" type="bigint"/>
        <column name="firstname" type="varchar(255)"/>
        <column name="lastname" type="varchar(255)"/>
    </createTable>
    <modifySql>
         <replace replace="bigint" with="long"/>
    </modifySql>
    <modifySql dbms="mysql">
         <append value=" engine innodb"/>
    </modifySql>
</changeSet>


我实际上是在寻找一些Java实现建议,因为所有的变更记录都是创建的,我也对它们进行了更改,修改或创建新的变更记录并不是我现在想要做的事情。如果你想在Java中这样做,我建议查看Liquibase源代码本身。我实际上是在寻找一些Java实现建议,因为所有的变更记录都是创建的,我也对它们进行了更改,修改或创建新的变更记录并不是我现在想要做的。如果你想在Java中这样做,我建议查看Liquibase源代码本身。