当Flink重发时如何处置数据库连接

时间:2019-06-12 07:11:50

标签: scala apache-flink flink-streaming

我将dbcp2.BasicDataSource用作数据库连接池。在某些地图功能中使用数据库查询来获取传感器的其他信息。我发现,当flink作业由于异常而重新启动时,旧的DB连接仍在服务器端处于活动状态。

flink 1.7版

BasicDataSource构造代码在这里

object DbHelper extends Lazing with Logging {
    private lazy val connectionPool: BasicDataSource = createDataSource()

    private def createDataSource(): BasicDataSource = {
        val conn_str = props.getProperty("db.url")
        val conn_user = props.getProperty("db.user")
        val conn_pwd = props.getProperty("db.pwd")
        val initialSize = props.getProperty("db.initial.size", "3").toInt

        val bds = new BasicDataSource
        bds.setDriverClassName("org.postgresql.Driver")
        bds.setUrl(conn_str)
        bds.setUsername(conn_user)
        bds.setPassword(conn_pwd)
        bds.setInitialSize(initialSize)
        bds
    }
}

1 个答案:

答案 0 :(得分:0)

将地图功能更改为RichMapFunction。覆盖close()的{​​{1}}方法,并在其中放置代码以关闭数据库连接。您可能还应该在RichMapFunction方法中放置代码以打开连接。