当前位置: 首页 > backend >正文

springboot中引入activemq的一个坑

生成环境忘记配置activemq的地址了,然后 @Resource private JmsTemplate jmsTemplate; springboot这个还能调用成功?是不是有个默认的?

在Spring Boot中,如果你没有配置ActiveMQ的连接信息,JmsTemplate 仍然能够被注入,但它的行为取决于你的具体配置和依赖情况。以下是几种可能的情况:

1. 没有配置ActiveMQ,但有嵌入式内存Broker

如果你在项目中引入了spring-boot-starter-activemq依赖,但没有配置任何ActiveMQ的连接信息(如spring.activemq.broker-url),Spring Boot会默认启动一个嵌入式内存Broker(基于Apache ActiveMQ Artemis)。此时:

  • JmsTemplate 会自动配置并指向这个内存Broker。

  • 消息会被发送到这个内存Broker,但重启应用后消息会丢失(因为是内存Broker)。

2. 没有配置ActiveMQ,也没有嵌入式Broker

如果你没有引入ActiveMQ相关的依赖(比如只引入了spring-boot-starter-jms),但尝试注入JmsTemplate,Spring Boot会尝试自动配置一个JmsTemplate,但由于缺少实际的JMS实现(如ActiveMQ、Artemis等),应用启动时会报错,提示缺少必要的配置或Bean。

3. 配置了其他JMS实现

如果你配置了其他JMS提供者(如RabbitMQ、IBM MQ等),JmsTemplate 会适配对应的实现。


如何验证你的环境?

  1. 检查依赖

    • 如果pom.xmlbuild.gradle中有spring-boot-starter-activemq,则默认会启动内存Broker。

    • 如果只有spring-boot-starter-jms,但没有具体的JMS实现依赖,JmsTemplate 会无法正常工作。

  2. 检查日志

    • 启动Spring Boot时,如果看到如下日志,说明使用了嵌入式Broker:

      text

      复制

      下载

      Embedded ActiveMQ server started at ...
    • 如果没有相关日志且没有配置外部Broker,JmsTemplate 的调用可能会失败(如抛出IllegalStateException或连接超时)。

  3. 测试发送消息

    • 调用jmsTemplate.convertAndSend("queue.name", "test")

      • 如果成功且无报错,说明有默认的内存Broker。

      • 如果报错(如Connection refusedNo JMS ConnectionFactory),说明没有配置任何Broker。


解决方案

如果你需要连接外部ActiveMQ,请确保在application.propertiesapplication.yml中配置:

properties

复制

下载

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin

如果没有配置且不希望使用内存Broker,建议显式禁用嵌入式Broker:

properties

复制

下载

spring.activemq.in-memory=false

总结:如果没有配置ActiveMQ地址但JmsTemplate能调用成功,说明Spring Boot默认启用了内存Broker。这在开发阶段可能没问题,但在生产环境中务必配置外部Broker地址!

http://www.xdnf.cn/news/14673.html

相关文章:

  • leetcode230-二叉搜索树中第K小的元素
  • [学习] C语言编程中线程安全的实现方法(示例)
  • ARM架构鲲鹏主机BClinux离线安装docker步骤
  • 《前端资源守卫者:SRI安全防护全解析》
  • OpenCV CUDA模块设备层-----创建一个“常量指针访问器” 的工具函数constantPtr()
  • 从设备自动化到智能管控:MES如何赋能牛奶饮料行业高效生产?
  • IAR平台全面升级,提升瑞萨MCU架构的嵌入式软件开发效率
  • C++语言发展历程-2025
  • 在大数据求职面试中如何回答分布式协调与数据挖掘问题
  • 单片机——浮点数转换4位数码管显示
  • JVM内存模型详解
  • 设计模式精讲 Day 11:享元模式(Flyweight Pattern)
  • STM32和C++ 实现配置文件导入、导出功能
  • uniapp+vue3做小程序,获取容器高度
  • 【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略
  • OVS Faucet练习(下)
  • 【Linux指南】文件管理高级操作(复制、移动、查找)
  • 【基础篇-消息队列】——详解 RocketMQ 和 Kafka 的消息模型
  • VR看房:房地产数字化转型的核心引擎
  • RSYNC+IONTIFY数据实时同步
  • 二刷苍穹外卖 day03
  • MySQL基础函数篇
  • (C++)素数的判断(C++教学)(C语言)
  • 逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
  • es中常规的根据字段查询时走什么索引(说明:「常规的根据字段查询」不包含分词查询)
  • 2025-06-22 思考-人的意识与不断走向死亡的过程
  • 文心一言(ERNIE Bot):百度打造的知识增强大语言模型
  • 端侧调用云存储实现头像存储
  • Redis快的原因
  • 扫雷中的数学原理