在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

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt