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 文件导入