如何使用Liquibase创建脚本而无需提供url,用户名,密码和驱动程序之类的数据库详细信息?

时间:2019-04-05 10:15:51

标签: liquibase

我通过提供输入ddl使用liquibase创建了data base change log脚本。

代码看起来像这样

    private void toSQL(DatabaseChangeLog d)
        throws DatabaseException, LiquibaseException, UnsupportedEncodingException, IOException {

    FileSystemResourceAccessor fsOpener = new FileSystemResourceAccessor();
    CommandLineResourceAccessor clOpener = new CommandLineResourceAccessor(this.getClass().getClassLoader());
    CompositeResourceAccessor fileOpener = new CompositeResourceAccessor(new ResourceAccessor[] { fsOpener, clOpener });

    Database database = CommandLineUtils.createDatabaseObject(fileOpener, this.url, this.username, this.password, this.driver, 
            this.defaultCatalogName, this.defaultSchemaName, Boolean.parseBoolean(this.outputDefaultCatalog),
            Boolean.parseBoolean(this.outputDefaultSchema), this.databaseClass, 
            this.driverPropertiesFile, this.propertyProviderClass, this.liquibaseCatalogName, 
            this.liquibaseSchemaName, this.databaseChangeLogTableName, this.databaseChangeLogLockTableName);


    Liquibase liquibase=new Liquibase(d, null, database);

    liquibase.update(new Contexts(this.contexts), new LabelExpression(this.labels), getOutputWriter());
}

我的liquibase.properties像这样

url=jdbc\:sqlserver\://server\:1433;databaseName\=test
username=test
password=test@123
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
referenceUrl=hibernate:spring:br.com.company.vacation.domain?dialect=org.hibernate.dialect.SQLServer2008Dialect

如您所见,Liquibase期望使用许多db参数,例如urlusernamepassworddriver,能够提供。

如何在不提供任何参数的情况下实现这一目标。有可能吗?

2 个答案:

答案 0 :(得分:0)

否,这是不可能的。如果希望liquibase与数据库交互,则必须告诉它如何连接到该数据库。

答案 1 :(得分:0)

我对liquibase中的offline mode操作进行了一些调查。就像这样。

以脱机模式运行仅支持updateSqlrollbackSQLtagtagExists。它不支持直接update, diff, or preconditions,因为实际上没有任何更新或要检查的内容。

使用offline:DATABASE_TYPE?param1=value1&aparam2=value2的url语法将脱机数据库“连接”。

下面的代码就足够了

this.url=offline:postgres?param1=value1&aparam2=value2;
this.driver=null;
this.username=null;
this.password=null;

因此不提供数据库详细信息。离线网址可以由商店类型组成。