常见问题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"));
    }
}
相关推荐
Re_zero3 小时前
一次 SSE 断流排查:PrintWriter 吞掉了我的 IOException
java·后端
我是人✓4 小时前
Java核心语法:作用域、循环与大数值处理
java·开发语言·后端
SL_staff4 小时前
BI不该只服务高管:JVS如何让仓库管理员自主配置库存预警
spring boot·数据分析·数据可视化
夜之眷属4 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法
蜗牛互联网4 小时前
Java标准HTTP调用多模态模型的票据抽取前置校验
java·人工智能·python·http
码哥字节5 小时前
Spring Boot 4.1 默认开虚拟线程,连接池为什么反而打满了?
spring boot·后端
工具派5 小时前
Agent 不是玄学:用 Java 状态机思维理解 LangGraph
java·人工智能·python
十年Java程序媛5 小时前
String / StringBuilder / StringBuffer|别再乱用字符串拼接,底层原理一次讲透
java·spring boot·后端
傲世仙尊5 小时前
类和对象中-构造函数与析构函数把初始化清理自动化
java·运维·自动化
她的男孩5 小时前
权限通了、列表有数,一点分页就炸Forge Admin 用 COUNT(1) 扛住复杂待办
java·spring boot·mybatis