You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成Kafka、Eureka Server与Telegram Bot模块的配置问题求助

问题:Telegram Bot依赖与Eureka、Spring集成冲突

我需要开发一个模块,实现用户订阅Telegram通知后,由Kafka监听器发送消息,用户通过Telegram Bot接收通知。但在集成Telegram Bot依赖时,出现了与Eureka Server、Spring框架的兼容性问题。

主Maven项目依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
</dependency>

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>${mapstruct.version}</version>
</dependency>

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

Telegram模块依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

<dependency>
    <groupId>org.telegram</groupId>
    <artifactId>telegrambots-spring-boot-starter</artifactId>
    <version>6.7.0</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.cassandra</groupId>
    <artifactId>cassandra-all</artifactId>
    <version>4.0.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

遇到的错误

错误1:JAXB类缺失

启动应用时抛出:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: javax/xml/bind/annotation/XmlElement
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773) ~[spring-beans-6.1.2.jar:6.1.2]
    ...
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlElement
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
    ...

错误2:Eureka客户端注册空指针

添加jaxb-api依赖后,出现新错误:

org.springframework.context.ApplicationContextException: Failed to start bean 'eurekaAutoServiceRegistration'
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:287) ~[spring-context-6.1.2.jar:6.1.2]
    ...
Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.cloud.netflix.eureka.CloudEurekaClient.getApplications()" because the return value of "org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration.getEurekaClient()" is null
    ...

移除Telegram依赖后应用可正常启动,但需要同时使用Eureka Server与Telegram Bot API。


解决方案

1. 完整解决JAXB依赖缺失问题

仅添加jaxb-api不足以解决问题,因为JDK 9+移除了JAXB的默认实现,需要补充完整的JAXB依赖:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.4.0-b180830.0359</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.4.0-b180830.0438</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.4.0-b180830.0438</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

2. 修复Eureka客户端注册空指针问题

原因分析

Telegram Bots Starter的自动配置逻辑可能与Eureka的生命周期管理冲突,导致EurekaClient未完成初始化就触发了服务注册流程。

解决步骤

方法一:调整Eureka自动注册时机

在application.yml中添加配置,确保Eureka客户端初始化完成后再执行注册:

spring:
  cloud:
    lifecycle:
      refresh:
        enabled: true
eureka:
  client:
    enabled: true
  instance:
    prefer-ip-address: true

同时确认主启动类上已添加@EnableEurekaClient或@EnableDiscoveryClient注解。

方法二:手动配置Telegram Bot,排除自动配置冲突

在主启动类中排除Telegram Bots的自动配置类,避免与Eureka初始化逻辑冲突:

@SpringBootApplication(exclude = {TelegramBotAutoConfiguration.class})
@EnableEurekaClient
public class TelegramNotificationApplication {
    public static void main(String[] args) {
        SpringApplication.run(TelegramNotificationApplication.class, args);
    }
}

然后手动配置Telegram Bot:

@Configuration
public class TelegramBotConfig {
    @Value("${telegram.bot.token}")
    private String botToken;

    @Value("${telegram.bot.username}")
    private String botUsername;

    @Bean
    public TelegramBot telegramBot() {
        return new CustomTelegramBot(botToken, botUsername);
    }

    @Bean
    public BotSession botSession(TelegramBot bot) throws TelegramApiException {
        ApiContextInitializer.init();
        TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
        return botsApi.registerBot(bot);
    }
}

方法三:确保Spring Cloud与Spring Boot版本兼容

Spring Boot 6.1.x对应的Spring Cloud版本应为2023.0.0(代号Leyton),版本不兼容会导致Bean初始化顺序异常。可通过Spring Boot的依赖管理统一控制版本:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2023.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3. 优化依赖管理

  • 若暂时不需要Cassandra,移除cassandra-all依赖,减少潜在冲突点
  • 利用Spring Boot的依赖管理功能,统一控制所有第三方依赖的版本,避免版本不一致问题

内容的提问来源于stack exchange,提问作者Maks Korniev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:27:10