AbstractMessageSourceAdvice已弃用,求替代类及相关使用教程
关于AbstractMessageSourceAdvice弃用后的替代方案
替代类说明
AbstractMessageSourceAdvice被弃用后,直接实现**MessageSourceAdvice接口**即可,该接口是原抽象类的官方替代,包含相同的核心方法定义。
改造后的代码示例
将原继承抽象类的写法改为实现接口,代码调整如下:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.integration.core.MessageSource; import org.springframework.integration.core.MessageSourceAdvice; import org.springframework.messaging.Message; public class EmptyFolderAdvice implements MessageSourceAdvice { private static final Logger LOGGER = LoggerFactory.getLogger(EmptyFolderAdvice.class); @Override public Message<?> afterReceive(Message<?> message, MessageSource<?> source) { if (message == null) { LOGGER.info("Empty folder, the process will stop"); System.exit(0); } return message; } @Override public boolean beforeReceive(MessageSource<?> source) { // 与原AbstractMessageSourceAdvice的默认行为保持一致,无需额外逻辑时返回true return true; } }
说明:MessageSourceAdvice接口包含beforeReceive和afterReceive两个方法,必须全部实现;如果不需要前置逻辑,返回true即可对齐原抽象类的默认行为。
使用教程要点
- 绑定Advice到消息源:在配置中把该Advice绑定到文件夹轮询的消息源(如
FileReadingMessageSource),示例Java配置如下:@Bean public FileReadingMessageSource fileReadingMessageSource() { FileReadingMessageSource source = new FileReadingMessageSource(); source.setDirectory(new File("/path/to/your/target/folder")); // 将自定义Advice加入消息源的Advice链 source.setAdviceChain(List.of(new EmptyFolderAdvice())); return source; } - 核心逻辑复用:原有的空文件夹判断、终止流程的逻辑可以完全保留,仅需调整类的实现关系。
- 生产环境建议:
System.exit(0)属于强制终止JVM的操作,生产环境更推荐通过控制消息源启停、关闭Spring容器等优雅方式终止流程。
内容的提问来源于stack exchange,提问作者Ares
相关产品推荐
相关产品推荐

