Spring Boot 3对接Amazon SQS的JMS配置兼容问题求助
问题
使用Spring Boot 3.0.1(搭配Spring JMS 6.0.3)时,新版本JMS采用jakarta.jms.ConnectionFactory,而旧版JMS用的是javax.jms.ConnectionFactory。此前的Bean配置代码如下:
@Configuration @EnableJms class JmsConfiguration { @Autowired private lateinit var sqsClient: SqsClient @Bean fun sqsConnectionFactory(): SQSConnectionFactory = SQSConnectionFactory(ProviderConfiguration(), sqsClient) @Bean fun jmsListenerContainerFactory(): DefaultJmsListenerContainerFactory { val factory = DefaultJmsListenerContainerFactory() factory.setConnectionFactory(sqsConnectionFactory()) factory.setDestinationResolver(DynamicDestinationResolver()) factory.setSessionAcknowledgeMode(CLIENT_ACKNOWLEDGE) return factory } @Bean fun jmsTemplate(): JmsTemplate = JmsTemplate(sqsConnectionFactory()) }
但目前使用的SQS依赖仍基于javax实现,依赖配置如下:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>sqs</artifactId> <version>2.19.19</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-sqs-java-messaging-lib</artifactId> <version>2.0.3</version> </dependency>
执行factory.setConnectionFactory(sqsConnectionFactory())时报错,提示该连接工厂并非jakarta类型的ConnectionFactory,求解决办法。
解决方案
升级SQS消息库到兼容Jakarta的版本
amazon-sqs-java-messaging-lib从2.2.0版本开始支持Jakarta JMS 3.0,直接升级该依赖版本即可:<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-sqs-java-messaging-lib</artifactId> <version>2.2.0</version> <!-- 也可使用更高的稳定兼容版本 --> </dependency>同时建议将AWS SDK SQS的版本升级到2.20.x及以上的稳定版,确保整体兼容性。
调整代码类型声明(可选)
升级依赖后,SQSConnectionFactory会自动实现jakarta.jms.ConnectionFactory,原代码的类型兼容问题会自动解决。如果需要更明确的类型约束,可以修改连接工厂Bean的返回类型:@Bean fun sqsConnectionFactory(): jakarta.jms.ConnectionFactory = SQSConnectionFactory(ProviderConfiguration(), sqsClient)清理旧依赖避免冲突
检查项目中是否存在残留的javax.jms相关依赖(比如javax.jms:jms-api),这类依赖会与Jakarta包产生冲突,需要手动排除。以Maven为例:<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-sqs-java-messaging-lib</artifactId> <version>2.2.0</version> <exclusions> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms-api</artifactId> </exclusion> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者secret
相关产品推荐
相关产品推荐

