在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;

    @Autowired
    public FlywayConfig(DataSource dataSource, DataSourceProperties dataSourceProperties) {
        this.dataSource = dataSource;
        this.dataSourceProperties = dataSourceProperties;
    }

    @Bean
    public FlywayProperties flywayProperties() {
        return new FlywayProperties();
    }

    @PostConstruct
    public void migrate() throws SQLException {
        String username = dataSourceProperties.getUsername();
        String password = dataSourceProperties.getPassword();
        String url = dataSourceProperties.getUrl();

        // MySQL数据库连接的url
        String connectUrl = url.substring(0, url.lastIndexOf("/"));
        // 数据库名
        String database = url.substring(url.lastIndexOf("/") + 1);
        // 创建数据库的SQL
        String 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();
        }
    }

}

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

第二次启动的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/296930.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python机器学习】线性模型——lasso

除了岭回归,还有一种正则化的线性回归是lasso,与岭回归相同,使用lasso也是约束系数使其接近于0,但方法不同,叫做L1正则化。L1正则化的结果是使用lasso时某些系数刚好为0。说明某些特征被模型完全忽略。 同样以波士顿房…

企业防泄密软件超全图文解析!快来看!

防泄密软件作为保障企业信息安全的重要工具,其重要性不言而喻。本文将为您解析企业防泄密软件的方方面面,帮助您了解如何选择适合自己企业的防泄密软件。 一、泄密的渠道有哪些 1、外部入侵:黑客攻击、病毒感染等外部因素可能导致企业的数据…

Vue脚手架及组件开发

组件插槽: 路由数据传递:

ubuntu20.04安装cuda11.7和显卡驱动

1、禁用nouveau sudo vi /etc/modprobe.d/nouveau.conf 在最下面加入blacklist nouveau sudo update-initramfs -u sudo reboot 输入命令,如果没有任何输出,证明禁用成功 lsmod | grep nouveau 2、安装cuda11.7 CUDA Toolkit Archive | NVIDIA Deve…

ubuntu 22 virt-manger(kvm)安装winxp; ubuntu22体验 firebird3.0

安装 、启动 virt-manager sudo apt install virt-manager sudo systemctl start libvirtdsudo virt-manager安装windowsXP 安装过程截图如下 要点1 启用 “包括寿终正寝的操作系统” win_xp.iso 安装过程 : 从winXp.iso启动, 执行完自己重启从硬盘重启&#xff0c…

高压放大器输出接法及其注意事项

高压放大器应用场景非常广泛,非常适用于半导体高压驱动、TFT产业高压驱动、各种高压工程等应用;也很适用当作音频信号产生器或函数波形产生器的波形放大使用。使用场景广泛,放大器的输出接法也多种,对于不同的放大器也有对应的输出…

【漏洞复现】ActiveMQ反序列化漏洞(CVE-2015-5254)

Nx01 产品简介 Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件。ActiveMQ是消息队列服务,是面向消息中间件(MOM)的最终实现,它为企业消息传递提供高可用、出色性能、可扩展、稳定和安全保障。 Nx02 漏洞描述 Re…

怎么做表单二维码来获取用户数据?扫码填表的制作方法

​怎么用二维码来收集其他人的信息,比如用户反馈、信息采集、问卷调查等等,都是现在表单二维码的常见应用方式。那么如果我们想制作一个表单二维码用来采集其他人员的反馈信息,用二维码生成器来制作的步骤有哪些呢?下面来教大家在…

软件测试|SQL中的null值,该如何理解?

深入理解SQL中的Null值:处理缺失数据的重要概念 简介 Null值在SQL中是用于表示缺失或未知数据的特殊值。本文将深入探讨Null值的概念、处理方法和注意事项,以帮助读者更好地理解和处理SQL中的缺失数据。 在SQL数据库中,Null值是一种特殊的…

linux虚拟机网络不通,如何配置ip解决网络问题

续接前文 Hyper-V创建linux虚拟机,共享wifi网络-CSDN博客 创建虚拟机后,网络都正常,可以使用,今天的一次异常关机后(电源不小心拔掉了),再次打开这个虚拟机,网络都失效了。。。。 …

轻松获取CHATGPT API:免费、无验证、带实例

免费获取和使用ChatGPT API的方法 快速开始:视频教程 章节一:GPT-API-Free开源项目介绍 GPT-API-Free 是一个开源项目,它提供了一个中转API KEY,使用户能够调用多个GPT模型,包括gpt-3.5-turbo、embedding和gpt-4。这…

修改对象的行为和值(代理)

文章目录 前言一、复制一个对象二、代理对象重点来了 总结 前言 最近遇到一个需求,需要在某个位置,统一处理对象的一些属性值: 方案有两种: 直接复制一份,将属性覆盖后,返回一个新对象搞一个代理类,代理这个对象,修改对象的原有行为和值,从而达到修改属性值的目的…

告别2023,无论何年我都是最幸福的程序员。

序 2023年注定是不平凡的一年,有太多的意外,无论是工作还是家庭。唯一不变的是坚持,岁月的静好,离不开同事们的负重前行,作为一个程序员来说,我是幸运的,也是最幸福的。生活的漫漫长路&#xf…

Node.js基础知识点(二)

一、Node环境安装(Windows) 1.下载对应的node.js版本:https://nodejs.org/en/download/ 2.下载完成后,双击安装包,开始安装node.js 3.勾选复选框,点击【Next】按钮 4.修改好目录后,点击【Next】按钮 5.此处…

调整几行代码,接口吞吐提升 10 倍,性能调优妙啊!

景 分析过程 总结 背景 公司的一个ToB系统,因为客户使用的也不多,没啥并发要求,就一直没有经过压测。这两天来了一个“大客户”,对并发量提出了要求:核心接口与几个重点使用场景单节点吞吐量要满足最低500/s的要求。 当时一想,500/s吞吐量还不简单。Tomcat按照100个线程…

扫码看文档的方法有哪些?文档生成二维码在线教程

现在经常会看到很多企业的宣传栏都会通过二维码来做通知或者信息的发布与展示,二维码中的常见内容大多是文件内容,比如常见的有word、excel、pdf等类型。那么这种用来展示文件内容的二维码制作的方法是什么样的呢?其实制作文件二维码的方法是…

TS学习笔记一:认识TS及环境准备

本次学习笔记是具有一定js基础的情况下从头开始学习ts相关内容。 视频信息 TS学习笔记一:认识TS及环境准备 B站视频 TS学习笔记一:认识TS及环境准备 西瓜视频 https://www.ixigua.com/7320049274006274560 1.1.目的 通过本次学习,学习并…

【激活函数】SELU 激活函数

1、介绍 SELU (Scaled Exponential Linear Unit) SELU是对ELU激活函数的改进,通过引入自动标准化机制,使得神经网络的隐藏层在训练过程中可以自动地保持输出的均值和方差接近于1。 # 定义 SELU 激活函数 def selu(x, alpha1.67326, lambda_1.0507):retu…

深圳易图讯实景三维数字孪生系统 实景三维电子沙盘

深圳易图讯实景三维数字孪生系统是一款基于三维地理空间的数字孪生系统,首先,该系统集成了多维度地理空间数据,可以将各类数据与应用需求进行充分整合,实现数据跨界融合、场景全角度可视等功能。其次,该系统具备智能化…

计算机毕业设计----ssm大学生兼职论坛

项目介绍 该项目是一个大学生校园兼职平台,分为前台和后台功能,主要用户有三种角色:分别是商家、学生、管理员。商家可以发布兼职信息,发布后,管理员进入后台确认信息是否有效,并且审核该兼职信息。学生登…