我正在处理一个当前使用 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/