答:先区分ActiveMQ Classic与Artemis,再选择相应Boot starter和兼容客户端,配置连接工厂与Broker地址,常用JmsTemplate发送、JmsListener接收。它们是消息接入工具,不会自动让数据库更新和消息发送成为一个跨系统原子事务。消息确认、重投与幂等仍需设计。
答:常见方式是启用EnableScheduling并在受管方法上声明Scheduled,选择fixedDelay、fixedRate或cron。它提供进程内调度,不保证多实例只执行一份,也不自动保存停机期间错过的触发。任务是否可重入、执行多久及失败如何处理,仍要明确。
答:当前应按Log4j2集成,不继续推荐旧Log4j1.x。Boot常用默认日志方案可通过排除相应默认starter,再引入匹配的Log4j2 starter替换,并使用合适的配置文件。要检查整个依赖树,避免多个SLF4J实现或互相桥接形成冲突。
答:使用匹配的FreeMarker starter,放置模板与控制器,向模型加入需要的数据,再返回逻辑视图名。Boot可简化默认解析器配置,但模板路径、后缀、缓存和输出格式仍需确认。FreeMarker是服务端模板引擎,不是把任意Java对象都自动变成浏览器应用的框架。
答:常用服务层Transactional声明事务边界,由匹配的事务管理器协调数据库资源;也可用TransactionTemplate等显式组织。Boot可以提供相应自动配置,但事务语义来自资源与Spring事务基础设施。一个注解不会把多个数据库、HTTP调用和消息Broker自动变成原子操作。
答:可以在当前支持范围内选择其他嵌入式Servlet服务器,例如Boot4.1.2支持Jetty12.1,并调整对应starter与传递依赖。它不表示任意容器只要换个名字就兼容;Servlet版本、Web栈和部署形式都要匹配,尤其不能把历史Undertow支持清单直接沿用到Boot4。
答:先按业务边界区分数据源,再明确每组访问组件、会话工厂或实体管理器、事务管理器的对应关系。用Qualifier或明确命名消除歧义;Primary只表示某些注入的默认倾向,不会自动让每条SQL按业务路由,也不会把两库操作合成一个本地事务。
答:让资源、HTTP方法、状态码和输入输出契约表达真实业务;明确验证、授权、分页、幂等和错误格式,再配可重复测试与文档。Boot能提供Web与序列化工具,但不会替你决定这些契约。“所有接口返回200加一个code”或“把实体全部序列化”都不是通用最佳实践。
答:治理包含服务发现、路由、超时、隔离、限流和观测等协作,Boot本身不是一套自动完成所有治理的控制平面。先明确保护哪个依赖或资源,再在网关、客户端或服务入口选择合适机制。单实例内存计数与多实例共享限流语义不同,不能只加一个注解就假定全局生效。
答:响应式编程用异步数据流及相关操作组织计算,Reactor等支持背压信号;响应式系统更关注整体响应性、弹性、可扩展与消息驱动。两者不是同义词。Boot可帮助配置WebFlux等技术,但用了Mono或Flux不代表系统自动非阻塞、没有资源瓶颈或无需容量设计。