使用 spring boot 重命名 Liquibase 变更日志表

mkh*_*red 4 java liquibase spring-boot

我正在使用Liquibase (v 3.5.3)Spring Boot (v 1.5.3)

我想使用 spring 引导属性文件更改 liquibase 更改日志表名称。

我发现这样做的唯一方法是设置liquibase.databaseChangeLogTableNameliquibase.databaseChangeLogLockTableName系统属性来覆盖默认表名。

有没有其他方法可以使用 spring 引导属性文件而不是设置系统属性来覆盖默认的 liquibase 表名称?

leu*_*rer 9

由于这是 1 岁,仍然是我为这个问题找到的第一个谷歌结果:

对于大约 spring boot 2.1.x(https://github.com/spring-projects/spring-boot/issues/15544 last response)设置这些属性对我有用:

spring.liquibase.database-change-log-lock-table=MY_CUSTOM_DATABASECHANGELOGLOCK
spring.liquibase.database-change-log-table=MY_CUSTOM_DATABASECHANGELOG
Run Code Online (Sandbox Code Playgroud)


小智 6

有同样的问题并设法通过覆盖 liquibase 全局配置来解决它。要获取databaseChangeLogTableNamedatabaseChangeLogLockTableName liquibase 创建LiquibaseConfiguration实例并初始化所有默认参数,但您可以使用下一个代码覆盖这些参数。下面是我的 Liquibase 配置文件和属性。

应用程序属性

## Liquibase default properties
application.local.database.liquibase.tag = application-integration
application.local.database.liquibase.change.log.table.name = DATABASE_CHANGE_LOG
application.local.database.liquibase.change.log.lock.table.name = DATABASE_CHANGE_LOG_LOCK
application.local.database.liquibase.should.run = true
application.local.database.liquibase.change.log = classpath:database/application-database-changes.xml
Run Code Online (Sandbox Code Playgroud)

Spring Boot 配置

import liquibase.configuration.GlobalConfiguration;
import liquibase.configuration.LiquibaseConfiguration;
import liquibase.integration.spring.SpringLiquibase;
... other dependencies...

@Configuration
public class LocalDatabaseLiquibaseConfig {

@Autowired
@Qualifier(ApplicationComponentNames.LOCAL_DATA_SOURCE)
private DataSource localDatabaseDataSource;

@Value("${application.local.database.liquibase.change.log.table.name}")
private String localDatabaseLiquibaseChangeLogTableName;

@Value("${application.local.database.liquibase.change.log.lock.table.name}")
private String localDatabaseLiquibaseChangeLogLockTableName;

@Value("${application.local.database.liquibase.tag}")
private String localDatabaseLiquibaseTag;

@Value("${application.local.database.liquibase.should.run}")
private boolean isLocalDatabaseLiquibaseShouldRun;

@Value("${application.local.database.liquibase.change.log}")
private String localDatabaseLiquibaseChangeLog;

    @Bean
    public SpringLiquibase liquibase() {
        // Overwrite default liquibase table names by custom
        GlobalConfiguration liquibaseConfiguration = LiquibaseConfiguration.getInstance().getConfiguration(GlobalConfiguration.class);
        liquibaseConfiguration.setDatabaseChangeLogTableName(localDatabaseLiquibaseChangeLogTableName);
        liquibaseConfiguration.setDatabaseChangeLogLockTableName(localDatabaseLiquibaseChangeLogLockTableName);

        SpringLiquibase liquibase = new SpringLiquibase();
        liquibase.setDataSource(localDatabaseDataSource);
        liquibase.setShouldRun(isLocalDatabaseLiquibaseShouldRun);
        liquibase.setChangeLog(localDatabaseLiquibaseChangeLog);
        liquibase.setTag(localDatabaseLiquibaseTag);

    return liquibase;
    }
}
Run Code Online (Sandbox Code Playgroud)