java - 项目使用 Tomcat JNDI 数据源查找时如何实现 Liquibase 变更日志

标签 java hibernate tomcat liquibase

我正在处理一个当前使用 JNDI 查找数据源的项目,该文件名为 jdbc_customer.properties,它位于 Tomcat lib 文件夹中。在我的 java 代码中,它被设置为在我的 PersistenceManager.java 类中获取 jdbc_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 变更日志。我已经创建了 3 个不同版本的变更日志,如何将其正确实现到我的项目中?

最佳答案

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

page列出当前可用的 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 - 项目使用 Tomcat JNDI 数据源查找时如何实现 Liquibase 变更日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33481224/

相关文章:

hibernate - 当应用程序使用持久层或存储库时,DBA 是否有角色?

java - Spring Hibernate 在查询中添加 _

mysql - serverError :class javax. faces.el.E​​valuationException 无法执行查询

java - 在 Tomcat 6 中部署 Spring Boot 应用程序(传统部署)

java - 在无限循环中创建线程

java - 在 Java Zookeeper api 中禁用日志消息

java - Spring + hibernate : could not initialize proxy no Session - What to do when an exception occured on a DAO?

jsp - Tomcat-HSQLDB

java - 运行时 Java 中的重音问题

java - 如何从自定义 Mojo 中获取 Maven 二进制版本?