文章
Spring Boot 启动时的核心行为
当你运行 SpringApplication.run(BinlogMonitorApplication.class, args) 时,Spring Boot 会:
- 扫描组件(Component Scan)
默认扫描@SpringBootApplication所在包及其子包(即com.bigdata.monitor及其子包)。 - 实例化所有 Spring Bean
所有被以下注解标记的类会被创建为单例 Bean(默认 scope):@Component@Service@Repository@Controller/@RestController@Configuration- 以及其他通过
@Bean声明的类
BinlogConsumer带有@Component,所以会被实例化。 - 处理特殊注解的副作用
某些注解不仅用于标记 Bean,还会触发框架级行为:@KafkaListener→ Spring Kafka 会为该方法注册一个 Kafka 消费者客户端@Scheduled→ Spring 会将其加入定时任务调度器@EventListener→ 注册事件监听器@PostConstruct→ 在 Bean 初始化后立即执行
📡 关于 @KafkaListener 的关键点
- 它是一个 声明式注解:你不需要手动创建
KafkaConsumer。 - Spring Kafka 在启动时(或 Bean 初始化后)会:
- 读取
spring.kafka.*配置 - 创建底层 Kafka Consumer 客户端(基于
kafka-clients) - 加入指定的
group-id - 订阅指定的 Topic(支持 SpEL 表达式,如
#{'${monitor.initial-topics}'.split(',')}) - 启动后台线程轮询消息
- 消息到达时,异步调用你标注的方法(如
consume())
- 读取
🧩 补充说明:启动顺序(简化版)
1. 启动 JVM
2. 执行 main() → SpringApplication.run()
3. 加载 application.yml
4. 扫描包,发现 @Component 类(如 BinlogConsumer)
5. 创建 BinlogConsumer 实例
6. 检测到 @KafkaListener → 初始化 Kafka 消费者客户端
7. 应用启动完成(控制台打印 "Started BinlogMonitorApplication...")
8. 后台 Kafka 消费线程持续运行,等待消息