我正在寻找一种以通用方式将POJO转换为avro对象的方法.对于POJO级的任何更改,实现都应该是健壮的.我已经实现了它,但明确地填写了avro记录(参见下面的示例).
有没有办法摆脱硬编码的字段名称,只是填充对象的avro记录?反射是唯一的方式,还是avro提供开箱即用的功能?
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData.Record;
import org.apache.avro.reflect.ReflectData;
public class PojoToAvroExample {
static class PojoParent {
public final Map<String, String> aMap = new HashMap<String, String>();
public final Map<String, Integer> anotherMap = new HashMap<String, Integer>();
}
static class Pojo extends PojoParent {
public String uid;
public Date eventTime;
}
static Pojo createPojo() {
Pojo foo = new Pojo();
foo.uid = "123";
foo.eventTime = new Date();
foo.aMap.put("key", "val");
foo.anotherMap.put("key", 42);
return foo;
}
public static void …Run Code Online (Sandbox Code Playgroud) 我目前正在将很多 maven-jenkins-jobs 迁移到 gitlab-ci。
在这些 jenkins-jobs 中,我的团队严重依赖“每当构建 SNAPSHOT 依赖项时构建”触发器,因为我们有许多相互依赖的构建工件(jars 和 wars)。这样,保证了如果lib-SNAPSHOT.jar被改变和重建,也dependent-SNAPSHOT.war被重建,潜在的兼容性问题立即出现。
我想我也可以达到同样的行为,如果我手动设置触发器之间神器建立,如描述在这里:
现在,每当在项目 A 上推送新标签时,作业将 [...] 执行,从而触发项目 B 的重建
但是,这将非常难以维持。是否有更好/更优雅/更少维护工作/更神奇的解决方案来实现这一目标?