SpringBoot自定义初始化sql文件 支持多类型数据库
我在resources目录下有init.sql初始化sql语句

指定sql文件的地址

sql内容如下:
/*角色表*/
INSERT INTO #{schema}ccc_base_role (id, create_time, create_user_id, is_delete, role_name, status, update_time, update_user_id) VALUES('b89e30d81acb88448d412b7b196bf02e', '1710896575106', 'f1fe2f289b8646ced1bc0294a2bf6d09', 0, '超级管理员', 0, '1714467132605', 'f1fe2f289b8646ced1bc0294a2bf6d09');
- #{schema}用来指定数据库的视图 因为国产有些数据库新增数据时想要指定视图
java初始化代码如下:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhou.starter.jpacomment.service.AlterCommentService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ResourceLoader;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.List;/*** @author lcz* @desc 数据初始化器* @mail lcz_0130@163.com* @date 2024/05/11*/@Component
@Slf4j
public class DataInitializerConfig {@Resourceprivate JdbcTemplate jdbcTemplate;@Autowiredprivate ResourceLoader resourceLoader;@Resourceprivate DataInitializerMapper dataInitializerMapper;@Resourceprivate AlterCommentService alterCommentService;//这里是sql文件的目录@Value("${init.file}")String initFile;//存在多个服务共同使用 就用服务名进行判断是否初始化@Value("${spring.application.name}")String serviceName;@PostConstructpublic void initData() {//判断是否执行初始化sql文件List<DataInitializer> dataInitializers = dataInitializerMapper.selectList(new QueryWrapper<DataInitializer>().eq("service_name", serviceName));if (!dataInitializers.isEmpty()) {log.info("数据库已经初始化完成");return;}try {// 读取原始文件BufferedReader reader = new BufferedReader(new InputStreamReader(resourceLoader.getResource(initFile).getInputStream(), StandardCharsets.UTF_8));String line;//获取视图 可以通过命令查询 也可以通过导入我的jpacomment库 自动获取String schema = alterCommentService.getSchema();if (StringUtils.isNotBlank(schema)) {schema += ".";}while ((line = reader.readLine()) != null) {// 替换字符串String newLine = line.replace("#{schema}", schema);//如果newLine以/*开头就是注释文件不执行if (newLine.startsWith("/*")) {continue;}// 注意:每行都是一个完整的SQL语句jdbcTemplate.execute(newLine);}log.info("文件初始化替换完成");// 关闭流reader.close();} catch (IOException e) {throw new ServerException(GlobalErrorCodeConstants.SQL_INIT_ERROR);}//设置系统初始化完成DataInitializer dataInitializer = new DataInitializer();dataInitializer.setServiceName(serviceName);dataInitializerMapper.insert(dataInitializer);log.info("{}数据库初始化信息完成", serviceName);}
}
@Data
@TableName("ccc_base_data_initializer")
@Table(name = "ccc_base_data_initializer")
@Entity
@TableComment("初始化表")
public class DataInitializer implements Serializable {@Id@TableId(type = IdType.ASSIGN_UUID)@ColumnComment("主键id")private String id;@ColumnComment("服务名")private String serviceName;
}
下载开源库 直接打包即可
https://gitee.com/lcz2000/zhou-jpacomment
<!--数据库表注释--><dependency><groupId>com.zhou</groupId><artifactId>zhou-jpacomment</artifactId><version>1.0.0</version></dependency>
相关文章:
SpringBoot自定义初始化sql文件 支持多类型数据库
我在resources目录下有init.sql初始化sql语句 指定sql文件的地址 sql内容如下: /*角色表*/ INSERT INTO #{schema}ccc_base_role (id, create_time, create_user_id, is_delete, role_name, status, update_time, update_user_id) VALUES(b89e30d81acb88448d412…...
nginx--FastCGI
CGI 概念 nginx通过与第三方基于协议实现,即通过某种特定协议将客户端请求转发给第三方服务处理,第三方服务器会新建新的进程处理用户的请求,处理完成后返回数据给Nginx并回收进程(下次处理有需要新建),最后nginx在返回给客户端…...
【数据结构】浅谈
✨✨✨专栏:数据结构 🧑🎓个人主页:SWsunlight 目录 一、概念: 二、物理结构: 1、顺序存储结构: 2、链式存储结构: 3、数据索引存储结构: 4、数据散列存储结构…...
简洁大气APP下载单页源码
源码介绍 简洁大气APP下载单页源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面 效果截图 源码下载 简洁大气APP下载单页源码...
ICode国际青少年编程竞赛- Python-4级训练场-复杂嵌套for循环
ICode国际青少年编程竞赛- Python-4级训练场-复杂嵌套for循环 1、 for i in range(4):Dev.step(i6)for j in range(3):Dev.turnLeft()Dev.step(2)2、 for i in range(4):Dev.step(i3)for j in range(4):Dev.step(2)Dev.turnRight()Dev.step(-i-3)Dev.turnRight()3、 for i …...
Idea入门:一分钟创建一个Java工程
一,新建一个Java工程 1,启动Idea后,选择 [New Project] 2,完善工程信息 填写工程名称,根据实际用途取有意义的英文名称选择Java语言,可以看到还支持Kotlin、Javascript等语言选择包管理和项目构建工具Mav…...
QGraphicsView实现简易地图8『缓存视口周边瓦片』
前文链接:QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』 前7篇的地图加载,都采用最少瓦片数量的算法,即用最少数量的瓦片覆盖视口,以获得最快的加载速度。但是这样会带来一个问题,那就是每当移动地图时&#…...
如何在Java项目中使用Spring Boot快速连接达梦数据库(DM)
前言 在Java开发领域,Spring Boot凭借其简洁快速的特性成为现代应用开发的首选框架。本文将详细介绍如何在Spring Boot项目中整合JDBC以快速连接达梦数据库(DM),并提供一个简单的示例来验证连接是否成功。 一、环境准备与依赖配置 在开始之前…...
QT中的容器
Qt中的容器 关于Qt中的容器类,下面我们来进行一个总结: Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且他们进行了速度和存储的优化,因此可以减少可…...
安卓手机APP开发__屏幕兼容性概述
安卓手机APP开发__屏幕兼容性概述 目录 概述 屏幕大小 灵活的布局 备选的布局 可改写的图像 像素的深度 深度依赖 备选的位图 向量图形 概述 安卓运行各种各样的设备,它们有不同的屏幕大小和屏幕的像素深度。 系统执行基本的缩放和变形来适配在不同的屏幕…...
Java实现自定义注解,实现不需要token 验证就可以访问接口
目录 1 问题2 实现 1 问题 一个springboot 项目,需要token 验证,前端传过来token ,我们一般在项目全局写一个过滤器,去验证前端传过来的token ,如果有哪些接口不需要token验证,那么就排除这些接口,这个也需要配置。 …...
SpringBoot集成Minio
1.pom文件引入 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lomb…...
Colab/PyTorch - 003 Transfer Learning For Image Classification
Colab/PyTorch - 003 Transfer Learning For Image Classification 1. 源由2. 迁移学习(ResNet50)2.1 数据集准备2.2 数据增强2.3 数据加载2.4 迁移学习2.5 数据集训练&验证2.6 模型推理 3. 总结4. 参考资料 1. 源由 迁移学习已经彻底改变了 PyTorch 中处理图像分类的方式…...
数据结构深入理解--栈
目录 一、栈的定义 二、栈的实现 2.1 栈的结构 2.2 栈的初始化 2.3 栈的销毁 2.3 栈元素的插入 2.4 栈元素的删除 2.5 栈顶元素获取 2.6 栈元素有效个数获取 2.7 栈是否为空判断 三、代码总览 Stack.h Stack.c 测试代码:test.c 四、例题 例一: 例二ÿ…...
Maven 的仓库、周期和插件
优质博文:IT-BLOG-CN 一、Maven 仓库 在Maven的世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构建。Maven在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库。任何的构建都有唯一…...
parallels desktop19最新免费Mac电脑虚拟机软件
Parallels Desktop是一款运行在Mac电脑上的虚拟机软件,它允许用户在Mac系统上同时运行多个操作系统,比如Windows、Linux等。通过这款软件,Mac用户可以轻松地在同一台电脑上体验不同操作系统的功能和应用程序,而无需额外的硬件设备…...
波动性悖论:为何低风险股票长期跑赢高风险对手?
从去年开始,“红利低波”类的产品净值稳步向上,不断新高,让很多人关注到了A股“分红高”、“波动率低”这两类股票。分红高的公司更受投资者青睐,这从基本面的角度很容易理解,那么波动率低的股票明明波动更小ÿ…...
环信设置头像昵称(安卓android)版
在此真的要吐槽吐槽环信,那么大的公司,文档那么乱。。。真的像一坨屎一样,翻个demo东翻西翻,官网论坛看的眼瞎。。。几乎要放弃了,还好百度到别人的看了看弄出来了 1、首先,要确认自己用的是哪个环信的UI库…...
Rust:用 Warp 库实现 Restful API 的简单示例
直接上代码: 1、源文件 Cargo.toml [package] name "xcalc" version "0.1.0" edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies] warp "…...
【SpringBoot】 什么是springboot(一)?如何搭建springboot项目?
文章目录 SpringBoot第一章1、什么是springboot1、回顾ssm项目搭建流程2、springboot项目的优点2、搭建springboot项目方式1:方式2:第二章1、基本配置1、热部署2、注解3、端口配置application.properties特点application.yml特点注意4、环境配置springboot中的配置文件要求5、…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
