在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 Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是