背景
目前服务多需求并行开发,多套环境并行。包括开发环境,测试环境,预发布环境,正式环境,目前使用k8s进行镜像移交的方式,能保证服务一致性,但是脚本单独交付,零散且无法保证统一性,因此使用flyway方式,在服务启动时,执行脚本
实现方式
引入flyway依赖
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.5.7</version>
</dependency>
implementation("org.flywaydb:flyway-core:6.5.7")
数据库配置
datasource:
dynamic:
primary: master
strict: true
datasource:
master:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${mysql.master.host}/master?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username: ${mysql.master.username}
password: ${mysql.master.password}
sub:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${mysql.sub.host}/mcex_gw?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
username: ${mysql.sub.username}
password: ${mysql.sub.password}
多数据源代码
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
import java.util.Map;
import javax.annotation.Resource;
import org.flywaydb.core.Flyway;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* flyWay 多数据源执行配置
* @author Liaowc
* @version 1.0
* @since 2024/7/9 上午10:16
*/
@Configuration
public class FlyWayLoadConfig {
private static final String ENCODING = "UTF-8";
@Resource
private DynamicDataSourceProperties dynamicDataSourceProperties;
@Bean
public void migrate() {
final Map<String, DataSourceProperty> datasource = dynamicDataSourceProperties.getDatasource();
datasource.forEach((k,v)->{
Flyway flyway = Flyway.configure()
.dataSource(v.getUrl(),v.getUsername(),v.getPassword())
.encoding(ENCODING)
.baselineOnMigrate(true)
.load();
flyway.migrate();
});
}
}