常见问题03:SpringBoot项目启动初始化数据(执行sql文件)

1、类ResourceDatabasePopulator介绍

使用外部资源中定义的 SQL 脚本填充、初始化或清理数据库。

  1. 调用addScript(org.springframework.core.io.Resource)以添加单个 SQL 脚本位置。
  2. 调用addScripts(org.springframework.core.io.Resource...)以添加多个 SQL 脚本位置。
  3. 请参阅此类中的 setter 方法以获取更多配置选项。
  4. 调用populate(java.sql.Connection)execute(javax.sql.DataSource)使用配置的脚本初始化或清理数据库。

2、方法总结


3、通过注解@PostConstruct实现

bash 复制代码
package com.shucha.deveiface.web.config;

import com.sdy.common.utils.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.util.Date;

/**
 * @author tqf
 * @Description 项目启动初始化数据
 * @Version 1.0
 * @since 2022-04-13 09:29
 */
@Configuration
@Slf4j
public class DataInitializationConfig {

    @Autowired
    DataSource dataSource;

    @PostConstruct
    public void init() {
        // 项目启动初始化基本数据
        log.info("数据初始化开始: " + DateUtil.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss"));
        // 通过直接读取sql文件执行
        Resource resources = new ClassPathResource("sql/client_api_auth.sql");
        ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
        resourceDatabasePopulator.addScripts(resources);
        resourceDatabasePopulator.execute(dataSource);
        log.info("数据初始化结束: " + DateUtil.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss"));
    }
}
相关推荐
夜光小兔纸3 小时前
SQL Server 查询数据库中所有表中所有字段的数据类型及长度
数据库·sql·sql server
yuren_xia4 小时前
RabbitMQ 知识详解(Java版)
java·rabbitmq·java-rabbitmq
kfyty7255 小时前
轻量级 ioc 框架 loveqq,支持接口上传 jar 格式的 starter 启动器并支持热加载其中的 bean
java·jvm·ioc·jar·热加载
早起鸟儿5 小时前
docker-Dockerfile 配置
java·linux·运维·docker
云边小网安5 小时前
java集合篇(六) ---- ListIterator 接口
java·开发语言·青少年编程·java集合
都叫我大帅哥5 小时前
Spring WebFlux:响应式编程的“未来战士”还是“花架子”?
java·spring·flux
都叫我大帅哥5 小时前
Reactor 深度解析:响应式编程的「核反应堆」是如何工作的?
java·spring
不太厉害的程序员5 小时前
NC65配置xml找不到Bean
xml·java·后端·eclipse
我在北国不背锅6 小时前
基于Java开发的浏览器自动化Playwright-MCP服务器
java·playwright·mcp
LUCIAZZZ6 小时前
钉钉机器人-自定义卡片推送快速入门
java·jvm·spring boot·机器人·钉钉·springboot