我将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
}
}
答案 0 :(得分:0)
将地图功能更改为RichMapFunction
。覆盖close()
的{{1}}方法,并在其中放置代码以关闭数据库连接。您可能还应该在RichMapFunction
方法中放置代码以打开连接。