我已设置@EnableMessageHistory
我已经创建了这样的自定义转换器
public class FileMoveTransformer implements GenericTransformer<CustomerPojo, CustomerPojo> {
private boolean renameFile;
private String toLocation;
private static final Logger LOGGER = LoggerFactory.getLogger(FileMoveTransformer.class);
public FileMoveTransformer(String toLocation, final boolean renameFile) {
this.toLocation = toLocation;
this.renameFile = renameFile;
}
@Override
public CustomerPojo transform(CustomerPojo input) {
return input;
}
}
当我查看消息历史记录时,其显示如下
如上所述,如何将“ name”属性更改为自己的转换器,将使打印变得毫无意义。
答案 0 :(得分:2)
MessageHistory
是基于bean名称的:
private static Properties extractMetadata(NamedComponent component) {
Entry entry = new Entry();
String name = component.getComponentName();
String type = component.getComponentType();
if (name != null && !name.startsWith("org.springframework.integration")) {
entry.setName(name);
if (type != null) {
entry.setType(type);
}
}
if (!entry.isEmpty()) {
entry.setTimestamp(Long.toString(System.currentTimeMillis()));
}
return entry;
}
由于没有为使用id
的端点提供显式的FileMoveTransformer
,因此您将基于端点ConsumerEndpointFactoryBean
类获得该生成的bean名称。
由于您没有显示如何使用此FileMoveTransformer
,因此我只能滥用猜测它与IntegrationFlow
有关,并且您会遇到类似的情况:
.transform(new FileMoveTransformer())
因此,请考虑在其中添加一个id
,
.transform(new FileMoveTransformer(), e -> e.id("fileMoveTransformer"))
https://docs.spring.io/spring-integration/reference/html/java-dsl.html#java-dsl-endpoints
否则,请分享您的用法,我们将让您知道需要进行哪些更改,以为组件带来自己的自定义ID,并使您的消息历史记录更具可读性。