springboot 控制是否启动liquibase

为兼容某些环境不允许普通生产用户拥有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;
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_40455124/article/details/113811799