团队的业务需求,flink实时计算任务在sink polarDb时,每个任务都需要编写实体类sink代码,重复工作浪费时间。
观察之后发现代码可以实现通用sink,代码有重合。
通过泛型传入实体对象,通过反射获取字段名和字段值。
原来的sink代码,如果实体类字段非常多的话,可能要重复编写几十上百行,复杂枯燥且容易出错。
public class EventTopicSink extends RichSinkFunction<EventTopic> {
PreparedStatement ps;
private Connection connection;
@Override
public void invoke(EventTopic value, Context context) throws Exception {
String sql = SourceUtil.mysqlDml().get("polar_replace_pid_user_last_view_time");
connection = EnvUtil.getConnectionByEnv();
ps = connection.prepareStatement(sql);
ps.setObject(1, value.getDistinct_id());
ps.setObject(2, value