use of cn.hutool.db.Db in project Jpom by dromara.
the class InitDb method init.
@PreLoadMethod(value = Integer.MIN_VALUE)
private static void init() {
//
DbConfig instance = DbConfig.getInstance();
ServerExtConfigBean serverExtConfigBean = ServerExtConfigBean.getInstance();
DbExtConfig dbExtConfig = SpringUtil.getBean(DbExtConfig.class);
//
Setting setting = new Setting();
String dbUrl = instance.getDbUrl();
setting.set("url", dbUrl);
setting.set("user", dbExtConfig.getUserName());
setting.set("pass", dbExtConfig.getUserPwd());
// 配置连接池大小
setting.set("maxActive", dbExtConfig.getMaxActive() + "");
setting.set("initialSize", dbExtConfig.getInitialSize() + "");
setting.set("maxWait", dbExtConfig.getMaxWait() + "");
setting.set("minIdle", dbExtConfig.getMinIdle() + "");
// 调试模式显示sql 信息
if (dbExtConfig.getShowSql()) {
setting.set(SqlLog.KEY_SHOW_SQL, "true");
/*
@author Hotstrip
sql log only show when it's needed,
if you want to check init sql,
set the [sqlLevel] from [DEBUG] to [INFO]
*/
setting.set(SqlLog.KEY_SQL_LEVEL, "DEBUG");
setting.set(SqlLog.KEY_SHOW_PARAMS, "true");
}
Console.log("start load h2 db");
String sqlFileNow = StrUtil.EMPTY;
try {
// 创建连接
DSFactory dsFactory = DSFactory.create(setting);
// 先执行恢复数据
instance.executeRecoverDbSql(dsFactory);
/*
@author Hotstrip
add another sql init file, if there are more sql file,
please add it with same way
*/
PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
Resource[] resources = pathMatchingResourcePatternResolver.getResources("classpath:/sql/*.sql");
// 加载 sql 变更记录,避免重复执行
Set<String> executeSqlLog = instance.loadExecuteSqlLog();
// 过滤 temp sql
List<Resource> resourcesList = Arrays.stream(resources).sorted((o1, o2) -> StrUtil.compare(o1.getFilename(), o2.getFilename(), true)).filter(resource -> !StrUtil.containsIgnoreCase(resource.getFilename(), "temp")).collect(Collectors.toList());
// 遍历
for (Resource resource : resourcesList) {
try (InputStream inputStream = resource.getInputStream()) {
String sql = IoUtil.read(inputStream, CharsetUtil.CHARSET_UTF_8);
String sha1 = SecureUtil.sha1(sql);
if (executeSqlLog.contains(sha1)) {
// 已经执行过啦,不再执行
continue;
}
sqlFileNow = resource.getFilename();
int rows = Db.use(dsFactory.getDataSource()).execute(sql);
DefaultSystemLog.getLog().info("exec init SQL file: {} complete, and affected rows is: {}", sqlFileNow, rows);
executeSqlLog.add(sha1);
} catch (IOException ignored) {
}
}
instance.saveExecuteSqlLog(executeSqlLog);
GlobalDSFactory.set(dsFactory);
//
} catch (Exception e) {
DefaultSystemLog.getLog().error("初始化数据库失败 {}", sqlFileNow, e);
System.exit(0);
return;
}
instance.initOk();
// json load to db
InitDb.loadJsonToDb();
Console.log("h2 db Successfully loaded, url is 【{}】", dbUrl);
if (JpomManifest.getInstance().isDebug()) {
//
} else {
if (serverExtConfigBean.isH2ConsoleEnabled() && StrUtil.equals(dbExtConfig.getUserName(), DbConfig.DEFAULT_USER_OR_AUTHORIZATION) && StrUtil.equals(dbExtConfig.getUserPwd(), DbConfig.DEFAULT_USER_OR_AUTHORIZATION)) {
Console.error("【安全警告】数据库账号密码使用默认的情况下不建议开启 h2 数据 web 控制台");
System.exit(-2);
}
}
}
Aggregations