Java 通过Google DataFlow Transformer查询关系数据库

Java 通过Google DataFlow Transformer查询关系数据库,java,mysql,google-cloud-dataflow,Java,Mysql,Google Cloud Dataflow,我想在我的数据流管道上实现一个ParDo转换器,它基本上是根据要处理的每个元素提供的数据查询关系数据库。我知道用户定义的转换器中的每个属性都必须是可序列化的,但要使用jdbc向数据库查询数据,我需要创建一个连接,它自然是不可序列化的对象 在数据流管道上下文中仍然可以这样做吗?是的,这是可能的。您可以使您的连接对象是暂时的,这样它就不会被序列化,并通过startBundle方法为每个bundle创建一次。处理完捆绑包中的所有元素后,可以通过finishBundle方法关闭连接 class MyDo

我想在我的数据流管道上实现一个
ParDo
转换器,它基本上是根据要处理的每个元素提供的数据查询关系数据库。我知道用户定义的转换器中的每个属性都必须是可序列化的,但要使用
jdbc
向数据库查询数据,我需要创建一个
连接,它自然是不可序列化的对象


在数据流管道上下文中仍然可以这样做吗?

是的,这是可能的。您可以使您的连接对象是暂时的,这样它就不会被序列化,并通过
startBundle
方法为每个bundle创建一次。处理完捆绑包中的所有元素后,可以通过
finishBundle
方法关闭连接

class MyDoFn extends DoFn<X, Y> {
  private transient Connection jdbc;

  @Setup
  public void setup(Context c) {
    jdbc = // Create connection
  }

  @ProcessElement
  public void processElement(ProcessContext c) {
    // query database
  }

  @Teardown
  public void tearDown(Context c) {
    // close connection
  }
}
类MyDoFn扩展了DoFn{ 专用瞬时连接jdbc; @设置 公共无效设置(上下文c){ jdbc=//创建连接 } @过程元素 公共void processElement(ProcessContext c){ //查询数据库 } @拆卸 公共无效拆卸(上下文c){ //密切联系 } }
请参见最近添加的。

请参见。如果有人回答“是”而其他人回答“否”,您会接受哪一个?在这个问题的上下文中使用JDBC连接器是不可能的,因为将它用作源意味着读取数据流,因此允许在初始化期间提供查询。这并不意味着,因此不允许基于来自另一个流的传入元素进行查询。