logo 范 · 拾光录
网址收集 关于作者 Github Gitee
杂文随笔4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端编程3
前端基础知识16
UniApp15
Vue框架19
Java编程7
Java基础知识14
SpringBoot31
SpringMVC14
MyBatis8
SpringCloud15
RocketMQ1
MyCat1
数据库4
MySQL6
Redis7
MongoDB10
H21
Java技术栈4
知识整理分布式锁的实现方案MySQL事务MySQL的锁
软件工具箱14
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaPicGoRustFSVSCodeDockerObsidianObs录制
Linux知识11
树莓派安装及使用ArchLinux:常用软件ArchLinux:基础系统安装ArchLinux:深度优化ArchLInux:图形化界面安装ArchLinux:Nirifrp内网穿透Jar启动脚本Linux常用命令VirtualBox安装CentOSVirtualBox安装Ubuntu
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv
创意设计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加载完成、应用完全启动后才触发,时机最安全

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