拾光记录
218个文档 导航 作者 Gitee
随笔记录4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端知识4
基础知识17
Vue框架19
UniApp14
微信小程序1
Java编程6
Java基础15
SpringBoot31
SpringMVC18
MyBatis9
SpringCloud15
中间件2
数据库4
MySQL13
Redis8
MongoDB10
其他数据库1
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv管理工具
Linux12
Linux常用命令Jar启动脚本VirtualBox安装CentOSVirtualBox安装Ubuntu树莓派安装及使用frp内网穿透ArchLinux:基础系统安装ArchLInux:图形化界面安装ArchLinux:常用软件ArchLinux:深度优化ArchLinux:NiriArchLinux:模块记录
软件工具12
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaRustFSPicGoVSCodeDocker
创意设计2
Blender:入门知识UI设计基础知识
AI相关9
Claude CodeHermes AgentOpenAI基本使用OpenAI工具调用OpenAI记忆管理OpenAI推理执行OpenAI开发框架Langchainllama.cpp

解决问题

项目启动时需要手动脚本处理SQL问题,比如账号初始化,而密码又需要加密完成的情况

初始化配置类

import com.fan.model.document.DocumentService;
import com.fan.model.userAdmin.UserAdminService;
import jakarta.annotation.Resource;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * 初始化数据
 */
@Component
@Order(2)
public class InitData implements ApplicationRunner {

    @Resource
    private UserAdminService userAdminService;

    @Override
    public void run(ApplicationArguments args) {
        userAdminService.initUserAdmin();
    }

}

问题:@Order(2) 不够可靠,只能控制同一类型(都是ApplicationRunner)的执行顺序,但无法保证在所有MyBatis相关Bean(如 SqlSessionFactory、Mapper扫描)初始化完成后才执行,更稳妥的做法是:监听ApplicationReadyEvent

另一种方法

@Component
public class InitData {
    
    @Resource
    private UserAdminService userAdminService;
    
    @EventListener(ApplicationReadyEvent.class)
    public void init() {
        userAdminService.initUserAdmin();
    }
}

ApplicationReadyEvent在所有Bean加载完成、应用完全启动后才触发,时机最安全

解决问题初始化配置类另一种方法