目录

  • 前言
  • 代码实现
    • 添加依赖
    • sql文件命名方式也有讲究
    • 代码配置
    • 启动建库

前言

我之前研究过一个开源论坛项目,pybbs,他代码下载下来直接启动会自动建库建表,所以我拿过来研究一下(不难),这样以后方便开发萌新部署项目。

代码实现

添加依赖

        <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId></dependency>

将数据库导出成sql

然后在springBoot静态资源路径下建立db/migration(一定要看图)

sql文件命名方式也有讲究

sql 文件的命名具有一定规则,以V开头,接着两个下划线 __,接着可以写注释,然后以 .sql 结尾,如V3__alter_table.sql 版本号支持小版本x.y.z格式,但是为了简单起见,直接用一个数字递增更方便。

代码配置

import org.flywaydb.core.Flyway;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.sql.DataSource;/*** Created by tomoya.* Copyright (c) 2018, All Rights Reserved.* https://yiiu.co*/
@Configuration
public class FlywayConfig {@Resourceprivate DataSource dataSource;@PostConstruct@DependsOn("dataSourceHelper")public void migrate() {Flyway flyway = Flyway.configure().dataSource(dataSource).locations("classpath:db/migration","filesystem:db/migration").baselineOnMigrate(true).load();flyway.migrate();}}

启动建库

使用flyway,在启动的时候如果没有表会自动建表

package co.yiiu.pybbs.config;import co.yiiu.pybbs.util.SpringContextUtil;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.net.URI;
import java.net.URISyntaxException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;/*** Created by tomoya.* Copyright (c) 2018, All Rights Reserved.* https://yiiu.co*/
@Configuration
public class DataSourceHelper {@Resourceprivate DataSourceProperties dataSourceProperties;@PostConstructpublic void init() {if (siteConfig == null) siteConfig = SpringContextUtil.getBean(SiteConfig.class);try {Class.forName(dataSourceProperties.getDriverClassName());URI uri = new URI(dataSourceProperties.getUrl().replace("jdbc:", ""));String host = uri.getHost();int port = uri.getPort();String path = uri.getPath();String query = uri.getQuery();Connection connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "?" + query,dataSourceProperties.getUsername(), ataSourceProperties.getPassword());Statement statement = connection.createStatement();statement.executeUpdate("CREATE DATABASE IF NOT EXISTS `" + path.replace("/", "") + "` DEFAULT CHARACTER SET = "+ "" + "`utf8` COLLATE `utf8_general_ci`;");statement.close();connection.close();} catch (URISyntaxException | ClassNotFoundException | SQLException e) {e.printStackTrace();System.exit(0);}}
}

后面正常启动即可,但是基本代码,只做记录,不做叙述
如有问题可加论坛群:1048094312

通过flyway实现项目启动自动建库建表相关推荐

  1. SQL Server建库建表命令

    数据库建库建表 1.直接右键数据库,选择新建数据库: 2.通过新建查询,输入命令建库建表. 使用CREATE DATABASE创建数据库school. 数据文件的逻辑名称自定义,需要注意的点是主数据文 ...

  2. Mysql 数据库实战-建库-建表-查多表

    前文:MySql数据库基本概念 数据库 DataBase(数据库),存储数据的仓库. 第一方或第三方提供的图形化界面的客户端(DBeaver,Mariadb) 在Mysql中创建若干个数据库,每个数据 ...

  3. SqlService基础一篇搞定(建库建表、插入数据、修改和删除数据、基础查询、条件查询、模糊查询、聚合函数、分组查询、多表查询)

    SqlService基础知识总汇 前言 一.SQLSERVER建库建表 1.检查数据库名是否存在 2.创建数据库 3.建表 4.修改表结构 5.删除添加约束 二.SQLSERVER插入数据 1.向部门 ...

  4. Android数据库建库建表的几种方法

    方法一:SQLite数据库的建立 SQLiteDatabase database;public UserDao(Context context){//1.1建库database=context.ope ...

  5. hive:建库建表、表分区、内部表外部表、数据导入导出

    hive建库建表与数据导入 建库 hive中有一个默认的库: 库名: default 库目录:hdfs://hdp20-01:9000/user/hive/warehouse 新建库: create  ...

  6. MySQl建库建表及增删改查

    通过可视化工具建库建表 创建数据库 CREATE DATABASE studb2 CHAR SET utf8; 切换数据库(使用use 将数据库切换到 studb2) USE studb2 ; 在st ...

  7. mysql exercise --- one 建库建表练习参考

    建库建表操作练习 1 .表名 User Name Tel Content Date 张三 133******** 大专毕业 2006-10-11 张三 136******** 本科毕业 2006-10 ...

  8. 数据库的实例化操作——员工信息的查询——建库建表录入信息(一)

    数据库的实例化操作--建库建表录入信息. 本文章共分为三部分,通过建立员工部门的信息来熟练掌握数据库的单表查询.多表查询. 员工信息如下: Dept表(部门) Dept部门表结构 字段 类型 描述 d ...

  9. 数据库1-SQL server建库建表操作

    菜鸟学习数据库(一) 这是一个目录 菜鸟学习数据库(一) (一)每贴一句 (二)开始 (1)进入MSSMS软件 1.进入软件 2.点击新建查询: 3.新建的查询界面 (2)开始sql语言建库建表 1. ...

最新文章

  1. Android 第三方图表类 MPChart 的使用
  2. python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...
  3. 算法学习之路|住房空置率
  4. android service alertdialog,Android service里面启动alertdialog
  5. C#的两种类据类型:值类型和引用类型
  6. TCP协议下 Socket 与 ServerSocket
  7. lnmp构架——对tomcat详解
  8. TF-IDF的java实现(权重排序,可用来处理大数据集)
  9. python怎么返回上一行代码_Python实现判断一行代码是否为注释的方法
  10. 星河经纬加入会员可靠吗_星河湾外墙防水补漏 星河湾外墙防水补漏公司 星河湾外墙防水补漏师傅 星河湾外墙防水补漏施工队电话...
  11. Python框架篇之Django(Models数据表的创建、数据库配置)
  12. cello 有关状态
  13. 用matlab仿真自由落体,基于Matlab的小球自由落体仿真实现
  14. FZUOJ 2214 Knapsack problem 背包
  15. 高德地图 poi 搜索
  16. 什么是迁移学习?什么时候使用迁移学习?
  17. 2018“人工智能”:是彻底复苏?还是起落轮回?| 抢票
  18. 个人博客系统源码 溯雪Sxlog轻博客源码 PHP开源 简洁干净轻博客源码
  19. 淘宝API接口系列,获取购买到的商品订单列表,卖出的商品订单列表,订单详情,订单物流,买家信息,收货地址列表,买家token
  20. Android 62 自制域名解析 服务 花生壳太贵

热门文章

  1. Rhino5曲面造型插件Autodesk T-Splines v4.0.r11183
  2. Java实现指定年份月份的日历表
  3. 信息安全 实验五、Windows安全策略
  4. 海马玩赵珅:我们想给用户提供免费云游戏服务
  5. 深度学习可解释性-可视化技术
  6. 特网云虚拟主机预装MetInfo|米拓企业建站系统
  7. 米拓CMS去除(修改)版权信息方法
  8. 波斯猫新品上市宣传怎么做?如何利用软文营销做好新品宣传
  9. Word中怎样添加快速访问工具栏?这样操作很简单,20秒完成
  10. 操作系统进程同步算法——生产者-消费者问题