减少 Spring Cloud Kafka Streams 应用程序中的样板文件
Reducing boilerplate in Spring Cloud Kafka Streams app
在我的 Spring Cloud Kafka Streams 应用程序中,我想将 KTable<String, Foo>
加入 KTable<String, Bar>
。我的应用程序的输入已使用 MessagePack 进行编码,因此我使用以下代码为 Foo
和 Bar
定义了 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);
}
似乎样板文件很多?特别是如果 Foo
和 Bar
有很多字段。我可以做些什么来缩短我的代码吗?
这里是 Kafka 新手。
到目前为止,我所看到的是有一个 FooBar class,它有一个 Foo 和 Bar 的实例,所以你不需要触摸 'joined' class.例如
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FooBar {
Foo foo;
Bar bar;
}
在我的 Spring Cloud Kafka Streams 应用程序中,我想将 KTable<String, Foo>
加入 KTable<String, Bar>
。我的应用程序的输入已使用 MessagePack 进行编码,因此我使用以下代码为 Foo
和 Bar
定义了 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);
}
似乎样板文件很多?特别是如果 Foo
和 Bar
有很多字段。我可以做些什么来缩短我的代码吗?
这里是 Kafka 新手。
到目前为止,我所看到的是有一个 FooBar class,它有一个 Foo 和 Bar 的实例,所以你不需要触摸 'joined' class.例如
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FooBar {
Foo foo;
Bar bar;
}