全栈开发

Spring Boot 启动时的核心行为

当你运行 SpringApplication.run(BinlogMonitorApplication.class, args) 时,Spring Boot 会:

  1. 扫描组件(Component Scan)
    默认扫描 @SpringBootApplication 所在包及其子包(即 com.bigdata.monitor 及其子包)。
  2. 实例化所有 Spring Bean
    所有被以下注解标记的类会被创建为单例 Bean(默认 scope):
    • @Component
    • @Service
    • @Repository
    • @Controller / @RestController
    • @Configuration
    • 以及其他通过 @Bean 声明的类
    👉 你的 BinlogConsumer 带有 @Component,所以会被实例化。
  3. 处理特殊注解的副作用
    某些注解不仅用于标记 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 消费线程持续运行,等待消息