SpringBoot 提供了一些接口来实现:
方式 | 适用场景 | 适用范围 |
---|---|---|
CommandLineRunner / ApplicationRunner | 适用于执行启动后任务,顺序可控 | Spring Boot 启动完成后 |
ApplicationReadyEvent 监听 | 适用于所有 Bean 加载完毕后 | 保证所有 Bean 都已准备就绪 |
@PostConstruct | 适用于 Bean 初始化后 | 仅适用于单个 Bean |
一般推荐使用 CommandLineRunner
或 ApplicationReadyEvent
,它们能确保 Spring Boot 启动完成后执行逻辑,同时避免 @PostConstruct
在某些情况下的不确定性。
ApplicationRunner
@Component
public class PermissionRoleSyncRunner implements ApplicationRunner {
@Autowired
private PermissionRoleService permissionRoleService;
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Spring Boot 启动完成,开始同步权限角色数据到 Redis...");
var permissionRoleData = permissionRoleService.getAllPermissionRoles();
redisTemplate.opsForValue().set("permission_role_data", permissionRoleData.toString());
System.out.println("同步完成!");
}
}