在 spring boot 项目中,可以通过以下几种方式实现 在项目启动完成后自动加载系统配置缓存操作 的需求:
1. 使用 commandlinerunner
commandlinerunner 是一个接口,可以用来在 spring boot 应用启动后立即执行一些逻辑代码。
实现方式:
import org.springframework.boot.commandlinerunner; import org.springframework.stereotype.component; @component public class systemconfigloader implements commandlinerunner { @override public void run(string... args) throws exception { // 在这里加载系统配置缓存 system.out.println("项目启动完成,开始加载系统配置..."); // 模拟加载配置操作 loadsystemconfig(); } private void loadsystemconfig() { // 假设从数据库中加载配置 system.out.println("系统配置加载成功!"); } }
2. 使用 applicationrunner
applicationrunner
与 commandlinerunner
类似,但支持接收一个 applicationarguments
对象,用于更灵活地处理传入参数。
实现方式:
import org.springframework.boot.applicationarguments; import org.springframework.boot.applicationrunner; import org.springframework.stereotype.component; @component public class systemconfigloader implements applicationrunner { @override public void run(applicationarguments args) throws exception { // 在这里加载系统配置缓存 system.out.println("项目启动完成,开始加载系统配置..."); loadsystemconfig(); } private void loadsystemconfig() { // 假设从数据库中加载配置 system.out.println("系统配置加载成功!"); } }
3. 使用 @eventlistener 监听 applicationreadyevent
通过监听 applicationreadyevent
,可以在 spring boot 完成所有启动流程后执行逻辑。
实现方式:
import org.springframework.context.event.contextrefreshedevent; import org.springframework.context.event.eventlistener; import org.springframework.stereotype.component; @component public class systemconfigloader { @eventlistener(applicationreadyevent.class) public void onapplicationready() { // 在项目启动完成后加载系统配置 system.out.println("项目启动完成,开始加载系统配置..."); loadsystemconfig(); } private void loadsystemconfig() { // 假设从数据库中加载配置 system.out.println("系统配置加载成功!"); } }
4. 使用 @postconstruct 注解
@postconstruct
注解会在 bean 初始化后执行,但其执行时机稍早于项目完全启动完成,因此需要配合延时操作来确保项目完全启动后再执行。
实现方式:
import jakarta.annotation.postconstruct; import org.springframework.stereotype.component; @component public class systemconfigloader { @postconstruct public void init() { // 延时加载以确保项目完全启动 new thread(() -> { try { thread.sleep(2000); // 模拟延时 system.out.println("项目启动完成,开始加载系统配置..."); loadsystemconfig(); } catch (interruptedexception e) { thread.currentthread().interrupt(); } }).start(); } private void loadsystemconfig() { // 假设从数据库中加载配置 system.out.println("系统配置加载成功!"); } }
5. 使用 smartlifecycle 接口
smartlifecycle
提供了更灵活的控制,可以控制代码的启动和停止时机。
实现方式:
import org.springframework.context.smartlifecycle; import org.springframework.stereotype.component; @component public class systemconfigloader implements smartlifecycle { private boolean running = false; @override public void start() { // 项目启动完成后执行逻辑 system.out.println("项目启动完成,开始加载系统配置..."); loadsystemconfig(); running = true; } @override public void stop() { // 停止逻辑(可选) system.out.println("项目停止时执行清理工作..."); } @override public boolean isrunning() { return running; } private void loadsystemconfig() { // 模拟加载配置操作 system.out.println("系统配置加载成功!"); } }
对比与推荐
简单场景:
- 推荐使用
commandlinerunner
或applicationrunner
,实现简单且清晰。
- 推荐使用
更灵活的监听启动事件:
- 推荐使用
@eventlistener
监听applicationreadyevent
,可以确保所有 bean 初始化完成。
- 推荐使用
需要更细粒度的控制:
- 使用
smartlifecycle
提供更灵活的控制。
- 使用
以上就是springboot项目启动后自动加载系统配置的多种实现方式的详细内容,更多关于springboot自动加载系统配置的资料请关注代码网其它相关文章!
发表评论