通过flyway实现项目启动自动建库建表
目录
- 前言
- 代码实现
- 添加依赖
- 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实现项目启动自动建库建表相关推荐
- SQL Server建库建表命令
数据库建库建表 1.直接右键数据库,选择新建数据库: 2.通过新建查询,输入命令建库建表. 使用CREATE DATABASE创建数据库school. 数据文件的逻辑名称自定义,需要注意的点是主数据文 ...
- Mysql 数据库实战-建库-建表-查多表
前文:MySql数据库基本概念 数据库 DataBase(数据库),存储数据的仓库. 第一方或第三方提供的图形化界面的客户端(DBeaver,Mariadb) 在Mysql中创建若干个数据库,每个数据 ...
- SqlService基础一篇搞定(建库建表、插入数据、修改和删除数据、基础查询、条件查询、模糊查询、聚合函数、分组查询、多表查询)
SqlService基础知识总汇 前言 一.SQLSERVER建库建表 1.检查数据库名是否存在 2.创建数据库 3.建表 4.修改表结构 5.删除添加约束 二.SQLSERVER插入数据 1.向部门 ...
- Android数据库建库建表的几种方法
方法一:SQLite数据库的建立 SQLiteDatabase database;public UserDao(Context context){//1.1建库database=context.ope ...
- hive:建库建表、表分区、内部表外部表、数据导入导出
hive建库建表与数据导入 建库 hive中有一个默认的库: 库名: default 库目录:hdfs://hdp20-01:9000/user/hive/warehouse 新建库: create ...
- MySQl建库建表及增删改查
通过可视化工具建库建表 创建数据库 CREATE DATABASE studb2 CHAR SET utf8; 切换数据库(使用use 将数据库切换到 studb2) USE studb2 ; 在st ...
- mysql exercise --- one 建库建表练习参考
建库建表操作练习 1 .表名 User Name Tel Content Date 张三 133******** 大专毕业 2006-10-11 张三 136******** 本科毕业 2006-10 ...
- 数据库的实例化操作——员工信息的查询——建库建表录入信息(一)
数据库的实例化操作--建库建表录入信息. 本文章共分为三部分,通过建立员工部门的信息来熟练掌握数据库的单表查询.多表查询. 员工信息如下: Dept表(部门) Dept部门表结构 字段 类型 描述 d ...
- 数据库1-SQL server建库建表操作
菜鸟学习数据库(一) 这是一个目录 菜鸟学习数据库(一) (一)每贴一句 (二)开始 (1)进入MSSMS软件 1.进入软件 2.点击新建查询: 3.新建的查询界面 (2)开始sql语言建库建表 1. ...
最新文章
- Android 第三方图表类 MPChart 的使用
- python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...
- 算法学习之路|住房空置率
- android service alertdialog,Android service里面启动alertdialog
- C#的两种类据类型:值类型和引用类型
- TCP协议下 Socket 与 ServerSocket
- lnmp构架——对tomcat详解
- TF-IDF的java实现(权重排序,可用来处理大数据集)
- python怎么返回上一行代码_Python实现判断一行代码是否为注释的方法
- 星河经纬加入会员可靠吗_星河湾外墙防水补漏 星河湾外墙防水补漏公司 星河湾外墙防水补漏师傅 星河湾外墙防水补漏施工队电话...
- Python框架篇之Django(Models数据表的创建、数据库配置)
- cello 有关状态
- 用matlab仿真自由落体,基于Matlab的小球自由落体仿真实现
- FZUOJ 2214 Knapsack problem 背包
- 高德地图 poi 搜索
- 什么是迁移学习?什么时候使用迁移学习?
- 2018“人工智能”:是彻底复苏?还是起落轮回?| 抢票
- 个人博客系统源码 溯雪Sxlog轻博客源码 PHP开源 简洁干净轻博客源码
- 淘宝API接口系列,获取购买到的商品订单列表,卖出的商品订单列表,订单详情,订单物流,买家信息,收货地址列表,买家token
- Android 62 自制域名解析 服务 花生壳太贵