我正在开发一个目前正在使用JNDI查找数据源的项目,该文件名为jdbc_customer.properties
,它位于Tomcat lib文件夹中。在我的java代码中,它被设置为获取jdbc_customer.properties
类中的PersistenceManager.java
文件。
目前我的项目在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个不同版本的更改日志,如何在项目中正确实现它?
答案 0 :(得分:0)
Liquibase changelog中的变更集和其他标记可以使用dbms属性进行标记,以指定应该应用于哪些数据库引擎。 Liquibase计算出它在运行时使用的dbms,并对更改日志进行过滤,以便仅考虑适用的更改。
此page列出了当前可用的dbms类型及其短名称': 下面是一个示例,说明如何使用modifySql标记生成一些特定于平台的SQL:
$