Spring Boot 3.0.2迁移:适配的SQSConnectionFactory版本咨询
Spring Boot 3.0.2 适配的SQS JMS版本及配置修正
核心问题原因
Spring Boot 3.x基于Jakarta EE 9规范,所有JMS相关API包名从javax.jms.*切换到了jakarta.jms.*。你当前使用的AWS SQS JMS 1.x/2.x旧版本依赖的是Java EE的javax.jms包,导致DefaultJmsListenerContainerFactory.setConnectionFactory()无法识别SQSConnectionFactory对象(类型不兼容)。
适配版本推荐
必须使用支持Jakarta JMS 3.0的AWS SQS JMS版本,同时建议同步升级AWS SDK到兼容版本:
- SQS JMS版本:选择
2.1.0及以上(从该版本开始官方支持Jakarta JMS 3.0) - AWS SDK版本:推荐迁移到AWS SDK v2(如
2.20.0及以上),因为Spring Boot 3对SDK v2的适配更完善,且SDK v1已进入维护期
调整你的gradle.properties:
# 适配Jakarta的SQS JMS版本 sqsVersion=2.1.0 # AWS SDK v2核心版本 awsSdkVersion=2.20.0 # 同步升级其他AWS服务SDK版本 stsVersion=2.20.0 ssmVersion=2.20.0 # 保留原有其他配置 hibernateVersion=6.1.6.Final secretsManagerJdbcVersion=1.0.5 secretsManagerCacheVersion=1.0.1 springdocOpenApiUiVersion=1.6.6
配置类代码修正
除了版本升级,还需要修改配置类的导入包,替换旧的javax.jms.Session为Jakarta版本:
import com.amazon.sqs.javamessaging.SQSConnectionFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.support.destination.DynamicDestinationResolver; // 替换为Jakarta的Session包 import jakarta.jms.Session; @Configuration @EnableJms public class JmsConfiguration { @Bean public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(SQSConnectionFactory connectionFactory) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); // 此时SQSConnectionFactory已实现jakarta.jms.ConnectionFactory,可正常注入 factory.setConnectionFactory(connectionFactory); factory.setDestinationResolver(new DynamicDestinationResolver()); factory.setConcurrency("3-10"); factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE); return factory; } }
额外注意点
- 清理项目中所有残留的
javax.jms相关依赖,避免包冲突 - 如果仍需使用AWS SDK v1,需升级到
1.12.500及以上版本(该版本开始支持Jakarta),但不推荐长期使用SDK v1 - 验证所有JMS相关代码的导入包,确保统一使用
jakarta.jms.*
内容的提问来源于stack exchange,提问作者Meherban
相关产品推荐
相关产品推荐

