在Flyway执行数据库脚本之前创建数据库

2024-01-06 16:20

本文主要是介绍在Flyway执行数据库脚本之前创建数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Flyway让我们不用手动执行sql脚本,但是众所周知,前提是要先创建项目的数据库。为了能够让运维的同事再偷一次懒,通过代码来自动完成数据库的创建,于是有了这篇文章的分享~

要实现这个效果,只需要两步:

第一步:排除Flyway的自动配置类

在springboot启动类上的注解上添加属性exclude = {FlywayAutoConfiguration.class}

@SpringBootApplication(exclude = {FlywayAutoConfiguration.class})

例如:

package cn.edu.sgu.www.mhxysy;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
import org.springframework.cloud.openfeign.EnableFeignClients;/*** @author heyunlin* @version 1.0*/
@EnableFeignClients(basePackages = "cn.edu.sgu.www.mhxysy.feign")
@SpringBootApplication(exclude = {FlywayAutoConfiguration.class})
public class MhxysyManagement {static Logger logger = LoggerFactory.getLogger(MhxysyManagement.class);public static void main(String[] args) {if (logger.isDebugEnabled()) {logger.debug("启动梦幻西游手游管理系统...");}SpringApplication.run(MhxysyManagement.class, args);}}

第二步:手动执行Flyway的初始化方法

在调用Flyway的load()方法之前执行创建数据库的SQL语句

package cn.edu.sgu.www.mhxysy.config;import lombok.extern.slf4j.Slf4j;
import org.flywaydb.core.Flyway;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.flyway.FlywayProperties;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;/*** flyway配置类* @author heyunlin* @version 1.0*/
@Slf4j
@Configuration
public class FlywayConfig {private final DataSource dataSource;private final DataSourceProperties dataSourceProperties;@Autowiredpublic FlywayConfig(DataSource dataSource, DataSourceProperties dataSourceProperties) {this.dataSource = dataSource;this.dataSourceProperties = dataSourceProperties;}@Beanpublic FlywayProperties flywayProperties() {return new FlywayProperties();}@PostConstructpublic void migrate() throws SQLException {String username = dataSourceProperties.getUsername();String password = dataSourceProperties.getPassword();String url = dataSourceProperties.getUrl();// MySQL数据库连接的urlString connectUrl = url.substring(0, url.lastIndexOf("/"));// 数据库名String database = url.substring(url.lastIndexOf("/") + 1);// 创建数据库的SQLString sql = "create database if not exists " + database + " DEFAULT CHARSET utf8mb4";// 创建数据库连接Connection connection = DriverManager.getConnection(connectUrl, username, password);PreparedStatement statement = connection.prepareStatement(sql);int update = statement.executeUpdate();if (update > 0) {log.debug("数据库{}不存在,已经完成创建...", database);}FlywayProperties flywayProperties = flywayProperties();if (flywayProperties.isEnabled()) {log.debug("FlywayConfig.migrate()方法执行...");Flyway flyway = Flyway.configure().dataSource(dataSource).locations(flywayProperties.getLocations().toArray(new String[]{})).baselineOnMigrate(flywayProperties.isBaselineOnMigrate()).load();flyway.migrate();}}}

第一次启动项目时效果(数据库还没有创建)

第二次启动的效果

这篇关于在Flyway执行数据库脚本之前创建数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576905

相关文章

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与