减少 Spring Cloud Kafka Streams 应用程序中的样板文件

Reducing boilerplate in Spring Cloud Kafka Streams app

在我的 Spring Cloud Kafka Streams 应用程序中,我想将 KTable<String, Foo> 加入 KTable<String, Bar>。我的应用程序的输入已使用 MessagePack 进行编码,因此我使用以下代码为 FooBar 定义了 Serdes。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Foo {
  String a;
  String b;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Bar {
  String c;
  String d;
}
// ObjectMapper mapper = new ObjectMapper(new MessagePackFactory());

@Bean
public Serde<Foo> fooSerde() {
  return new JsonSerde<Foo>(Foo.class, mapper);
}

@Bean
public Serde<Bar> barSerde() {
  return new JsonSerde<Bar>(Bar.class, mapper);
}

我的问题是,要在join之后指定KTable的值类型,我现在是否必须定义:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class FooBar {
  String a;
  String b;
  String c;
  String d;
}
@Bean
public Serde<FooBar> fooBarSerde() {
  return new JsonSerde<FooBar>(FooBar.class, mapper);
}

似乎样板文件很多?特别是如果 FooBar 有很多字段。我可以做些什么来缩短我的代码吗?

这里是 Kafka 新手。

到目前为止,我所看到的是有一个 FooBar class,它有一个 Foo 和 Bar 的实例,所以你不需要触摸 'joined' class.例如

@Data
@NoArgsConstructor
@AllArgsConstructor
public class FooBar {
  Foo foo;
  Bar bar;
}