当前位置: 首页 > news >正文

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>
http://www.lryc.cn/news/346603.html

相关文章:

  • nginx--FastCGI
  • 【数据结构】浅谈
  • 简洁大气APP下载单页源码
  • ICode国际青少年编程竞赛- Python-4级训练场-复杂嵌套for循环
  • Idea入门:一分钟创建一个Java工程
  • QGraphicsView实现简易地图8『缓存视口周边瓦片』
  • 如何在Java项目中使用Spring Boot快速连接达梦数据库(DM)
  • QT中的容器
  • 安卓手机APP开发__屏幕兼容性概述
  • Java实现自定义注解,实现不需要token 验证就可以访问接口
  • SpringBoot集成Minio
  • Colab/PyTorch - 003 Transfer Learning For Image Classification
  • 数据结构深入理解--栈
  • Maven 的仓库、周期和插件
  • parallels desktop19最新免费Mac电脑虚拟机软件
  • 波动性悖论:为何低风险股票长期跑赢高风险对手?
  • 环信设置头像昵称(安卓android)版
  • Rust:用 Warp 库实现 Restful API 的简单示例
  • 【SpringBoot】 什么是springboot(一)?如何搭建springboot项目?
  • 从loss角度理解LLM涌现能力
  • debian apt 更改阿里源
  • Spring Cloud | “微服务“ 架构 与 Spring Cloud
  • win10禁止自动更新的终极方法
  • 笨方法自学python(二)-注释
  • wireshark的安装使用及相关UDP、TCP、 ARP
  • 【软考】模拟考卷错题本2024-05-11
  • VMware虚拟机提示内存不足
  • 视频批量剪辑指南:一键合并视频并添加背景音乐,高效便捷
  • 讲讲C++四种类型转换
  • 探索LLM在广告领域的应用——大语言模型的新商业模式和新个性化广告的潜力