sql导入

只需正确配置好数据库链接,系统会自动导入初始化数据库数据。数据库脚本位于resources/sql/admin.sql

AppReadyListener.java

package com.cooljs;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileWriter;
import com.cooljs.core.comm.CoolProperties;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.io.File;


@Component
@Slf4j
public class AppReadyListener implements ApplicationListener<ApplicationReadyEvent> {

    @Resource
    private ScriptRunner scriptRunner;

    @Resource
    private CoolProperties coolProperties;

    @Resource
    private Environment environment;

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        initSql();
        log.info("COOL-ADMIN 服务启动成功!");
    }

    /**
     * 自动导入sql, 存在init.lock文件则不导入
     */
    void initSql() {
        try {
            if (coolProperties.getInitSql() != null && !coolProperties.getInitSql()) {
                return;
            }
            String sqlPath = Resources.getResourceAsFile("cool/sql").getPath();
            // 如果是本地开发不要读取target中的resources
            if (CollUtil.toList(environment.getActiveProfiles()).contains("local")) {
                sqlPath = System.getProperty("user.dir") + "/src/main/resources/cool/sql";
            }
            if (FileUtil.exist(sqlPath + "/init.lock")) {
                return;
            }
            File tempFile = new File(Resources.getResourceAsFile("cool/sql/").getPath());
            File[] files = tempFile.listFiles();
            assert files != null;
            for (File file : files) {
                String fileName = file.getName();
                if (file.isFile() && !fileName.equals("init.lock")) {
                    scriptRunner.runScript(Resources.getResourceAsReader("cool/sql/" + fileName));
                    log.info("自动导入 {} 文件成功", fileName);
                }
            }
            FileWriter fileWriter = new FileWriter(sqlPath + "/init.lock");
            fileWriter.write("coolSqlInit");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("自动导入sql文件失败,请手动导入");
        }
    }
}

TIP

成功导入数据库之后,系统会在resources/sql/admin.sql生成init.lock文件,下次启动就不会再导入,如需重新导入删除该文件即可

可以支持多个 sql 文件导入

Last Updated: