Search in sources :

Example 1 with DbConfig

use of io.jpom.system.db.DbConfig 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);
        }
    }
}
Also used : SignalHandler(sun.misc.SignalHandler) SecureUtil(cn.hutool.crypto.SecureUtil) Arrays(java.util.Arrays) DSFactory(cn.hutool.db.ds.DSFactory) DefaultSystemLog(cn.jiangzeyin.common.DefaultSystemLog) DbExtConfig(io.jpom.system.extconf.DbExtConfig) InitializingBean(org.springframework.beans.factory.InitializingBean) PathMatchingResourcePatternResolver(org.springframework.core.io.support.PathMatchingResourcePatternResolver) SQLException(java.sql.SQLException) PreLoadMethod(cn.jiangzeyin.common.PreLoadMethod) Map(java.util.Map) GlobalDSFactory(cn.hutool.db.ds.GlobalDSFactory) Signal(sun.misc.Signal) Setting(cn.hutool.setting.Setting) BaseGroupService(io.jpom.service.h2db.BaseGroupService) Resource(org.springframework.core.io.Resource) IoUtil(cn.hutool.core.io.IoUtil) DbConfig(io.jpom.system.db.DbConfig) WorkspaceService(io.jpom.service.system.WorkspaceService) Set(java.util.Set) IOException(java.io.IOException) Console(cn.hutool.core.lang.Console) BaseNodeService(io.jpom.service.h2db.BaseNodeService) SpringUtil(cn.jiangzeyin.common.spring.SpringUtil) Collectors(java.util.stream.Collectors) Db(cn.hutool.db.Db) SqlLog(cn.hutool.db.sql.SqlLog) PreLoadClass(cn.jiangzeyin.common.PreLoadClass) Configuration(org.springframework.context.annotation.Configuration) StrUtil(cn.hutool.core.util.StrUtil) Slf4j(lombok.extern.slf4j.Slf4j) List(java.util.List) JpomManifest(io.jpom.common.JpomManifest) DisposableBean(org.springframework.beans.factory.DisposableBean) CharsetUtil(cn.hutool.core.util.CharsetUtil) UserModel(io.jpom.model.data.UserModel) BaseServerController(io.jpom.common.BaseServerController) ServerExtConfigBean(io.jpom.system.ServerExtConfigBean) InputStream(java.io.InputStream) ServerExtConfigBean(io.jpom.system.ServerExtConfigBean) InputStream(java.io.InputStream) Setting(cn.hutool.setting.Setting) Resource(org.springframework.core.io.Resource) DSFactory(cn.hutool.db.ds.DSFactory) GlobalDSFactory(cn.hutool.db.ds.GlobalDSFactory) IOException(java.io.IOException) SQLException(java.sql.SQLException) IOException(java.io.IOException) DbExtConfig(io.jpom.system.extconf.DbExtConfig) DbConfig(io.jpom.system.db.DbConfig) PathMatchingResourcePatternResolver(org.springframework.core.io.support.PathMatchingResourcePatternResolver) PreLoadMethod(cn.jiangzeyin.common.PreLoadMethod)

Aggregations

IoUtil (cn.hutool.core.io.IoUtil)1 Console (cn.hutool.core.lang.Console)1 CharsetUtil (cn.hutool.core.util.CharsetUtil)1 StrUtil (cn.hutool.core.util.StrUtil)1 SecureUtil (cn.hutool.crypto.SecureUtil)1 Db (cn.hutool.db.Db)1 DSFactory (cn.hutool.db.ds.DSFactory)1 GlobalDSFactory (cn.hutool.db.ds.GlobalDSFactory)1 SqlLog (cn.hutool.db.sql.SqlLog)1 Setting (cn.hutool.setting.Setting)1 DefaultSystemLog (cn.jiangzeyin.common.DefaultSystemLog)1 PreLoadClass (cn.jiangzeyin.common.PreLoadClass)1 PreLoadMethod (cn.jiangzeyin.common.PreLoadMethod)1 SpringUtil (cn.jiangzeyin.common.spring.SpringUtil)1 BaseServerController (io.jpom.common.BaseServerController)1 JpomManifest (io.jpom.common.JpomManifest)1 UserModel (io.jpom.model.data.UserModel)1 BaseGroupService (io.jpom.service.h2db.BaseGroupService)1 BaseNodeService (io.jpom.service.h2db.BaseNodeService)1 WorkspaceService (io.jpom.service.system.WorkspaceService)1