我通过提供输入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
参数,例如url
,username
,password
,driver
,能够提供。
如何在不提供任何参数的情况下实现这一目标。有可能吗?
答案 0 :(得分:0)
否,这是不可能的。如果希望liquibase与数据库交互,则必须告诉它如何连接到该数据库。
答案 1 :(得分:0)
我对liquibase
中的offline mode
操作进行了一些调查。就像这样。
以脱机模式运行仅支持updateSql
,rollbackSQL
,tag
和tagExists
。它不支持直接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;
因此不提供数据库详细信息。离线网址可以由商店类型组成。