为兼容某些环境不允许普通生产用户拥有ddl权限,准备通过配置控制是否启动liquibase
开始打算自己写代码,可以参考下面被注释代码
//@ConditionalOnProperty(name = "autodeploy.elasticjob.liquibase.enabled", havingValue = "true",matchIfMissing = false)
@Configuration
public class LiquibaseConfig {
// @Value("${autodeploy.elasticjob.liquibase.enabled:ture}")
// private boolean enabled;
@Bean
public SpringLiquibase liquibase(DataSource dataSource) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog("classpath:liquibase/db.changelog-master.yaml");
liquibase.setContexts("development,test,production");
liquibase.setShouldRun(true);
return liquibase;
}
}
发现实际还会启动liquibase并且会报错。
进一步跟踪发现,其实liquibase自己已经有是否启动配置
,配置属性spring.liquibase.enabled即可,这个配置代码可以参考package org.springframework.boot.autoconfigure.liquibase的LiquibaseAutoConfiguration 类的以下代码:
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({
SpringLiquibase.class, DatabaseChange.class })
@ConditionalOnProperty(prefix = "spring.liquibase", name = "enabled", matchIfMissing = true)
@Conditional(LiquibaseDataSourceCondition.class)
@AutoConfigureAfter({
DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
@Import({
LiquibaseEntityManagerFactoryDependsOnPostProcessor.class,
LiquibaseJdbcOperationsDependsOnPostProcessor.class,
LiquibaseNamedParameterJdbcOperationsDependsOnPostProcessor.class })
public class LiquibaseAutoConfiguration {
修改后的代码如下:
@ConditionalOnProperty(name = "spring.liquibase.enabled", havingValue = "true",matchIfMissing = false)
@Configuration
public class LiquibaseConfig {
@Bean
public SpringLiquibase liquibase(DataSource dataSource) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog("classpath:liquibase/db.changelog-master.yaml");
liquibase.setContexts("development,test,production");
liquibase.setShouldRun(true);
return liquibase;
}
}