Flink程序富函数中使用定时任务查询mysql

这篇具有很好参考价值的文章主要介绍了Flink程序富函数中使用定时任务查询mysql。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flink程序富函数中使用定时任务查询mysql出现内存堆积

问题描述

flink程序在跑的过程中, 发现跑几天就停掉了, 看日志发现是代码中的ResultSet和Statement堆积的太多,引起的内存溢出,但是代码中确实已经关闭了ResultSet和Statement,但是还是一直出现OOM的问题

具体案例

在open方法中的案例
  override def open(parameters: Configuration): Unit = {
    parameterTool = getRuntimeContext.getExecutionConfig.getGlobalJobParameters.asInstanceOf[ParameterTool]
    queryMysql()
    TimerUtil.schedule(30000, 30000, queryMysql())

  }
说明
  定时任务中链接问题:
  1.connection链接 ,这个放在close方法里面进行关闭即可;
  2.ResultSet链接  , 即用即关;
  3.Statement链接  ,即用即关;
例如1:
def getMysqlEvent(): Map[Int, mutable.Set[String]] = {
    val sql = "SELECT * FROM test WHERE status = false"

    var statement: Statement = null
    var result: ResultSet = null
    try {
      statement = connection.createStatement()
      result = statement.executeQuery(sql)

      val map: mutable.Map[Int, mutable.Set[String]] = mutable.Map()
      while (result.next()) {
        val projectId = result.getInt(1)
        
      }
      eventMap.toMap
      
    } catch {
      case e: Exception =>
        e.printStackTrace()
        throw new Exception("error", e)
    } finally {
      DbUtils.close(result)
      DbUtils.close(statement)
    }
  }
例如2

(重点关注代码中的while循环那块,会产生内存堆积就在这块):文章来源地址https://www.toymoban.com/news/detail-628077.html

  def getStudents(): util.HashMap[Int, util.List[Student]] = {
    val sql = s"""select id from test01""".stripMargin
    var eventState: Statement = null
    var eventResult: ResultSet = null

    val map = new util.HashMap[Int, util.List[Student]]()

    val a11 = new util.ArrayList[Student]()
    val bbb = new util.ArrayList[Mater]
    try {
      eventState = connection.createStatement()
      eventResult = eventState.executeQuery(sql)
      while (eventResult.next()) {
        var attrStatement: Statement = null
        var resultSet: ResultSet = null
        try {
          val id = eventResult.getInt(1)
          val projectId = eventResult.getInt(2)

          val attrSql =
            s"""select * from aaa """.stripMargin
          attrStatement = connection.createStatement()
          resultSet = attrStatement.executeQuery(attrSql)
          while (resultSet.next()) {
            val id = resultSet.getInt(1)

          }
        } catch {
          case e: Exception => throw new Exception("Error ", e)
        }
        finally {
          DbUtils.close(resultSet)
          DbUtils.close(attrStatement)
        }
      }
      ttt
    }
    catch {
      case e: Exception => throw new Exception("Error ", e)
    }
    finally {
      DbUtils.close(eventResult)
      DbUtils.close(eventState)
    }
  }

解释:
在例1中 ,整个方法中只有一次sql查询,所以直接在代码最后面关闭即可

在例2中,整个方法中有两次sql查询,第二次sql查询会把第一次sql查询的结果进行循环遍历,然后再进行查询,,注意 while循环 , 这块会产生多个Statement和ResultSet对象,所以需要再代码中每一次查询结束后就会进行一次数据的查询

到了这里,关于Flink程序富函数中使用定时任务查询mysql的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Crontab(定时任务)使用: Linux-Centos7使用crontab制定定时任务,定时执行某任务

    参考:https://blog.csdn.net/m0_49605975/article/details/120701771 1.用yum命令安装Crontab 2.启动,关闭,重启 3.设置开机启动 1.设置定时任务-进入编辑模式 -和vim操作一至 2.查看定时任务列表 3.添加定时任务 样例: 添加一个定时任务,定时清空某个文件夹里面日志文件的内容 3.1 编写一个清

    2024年02月01日
    浏览(75)
  • springboot定时任务:同时使用定时任务和websocket报错

    项目使用了websocket,实现了消息的实时推送。后来项目需要一个定时任务,使用org.springframework.scheduling.annotation的@EnableScheduling注解来实现,启动项目之后报错 打断点 进入代码发现是这个定时任务的bean为null 由于先写的websocket推送消息,运行正常。之前一个项目只有一个定时任

    2024年02月11日
    浏览(38)
  • Django框架使用定时器-APScheduler实现定时任务:django实现简单的定时任务

    系统:windows10 python: python==3.9.0 djnago==3.2.0 APScheduler==3.10.1 1、创建utils包,在包里面创建schedulers包 utils/schedulers/task.py utils/schedulers/scheduler.py utils/schedulers/__init__.py 2、项目配置文件settings.py

    2024年02月12日
    浏览(46)
  • 使用shedlock实现分布式定时任务锁【防止task定时任务重复执行】

    第一步:引入shedlock相关依赖 ShedLock还可以使用Mongo,Redis,Hazelcast,ZooKeeper等外部存储进行协调,例如使用redis则引入下面的包 第二步:创建数据库表结构,数据库表的脚本如下: 第三步:添加shedlock配置类 (定时任务防重复执行的配置类) 第四步:在启动类上添加启动注

    2024年02月10日
    浏览(42)
  • flink学习35:flinkSQL查询mysql

    import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment import org.apache.flink.table.api.EnvironmentSettings import org.apache.flink.table.api.bridge.scala.{StreamTableEnvironment, tableConversions} object sqlQueryTable {   def main(args: Array[String]): Unit = {     //create env     val env = StreamExecutionEnvironment.getExecutionEnv

    2023年04月23日
    浏览(46)
  • Shell 脚本实现自动启动程序、日志管理和定时任务监控

    本篇将通过Shell 脚本实现自动启动Java程序、日志管理和定时任务监控。脚本启动程序具灵活定制、可移植性和扩展性强的优点,可以根据需要添加额外的功能、配置选项和自定义行为,从而满足更具体的要求。 确保将脚本中的/path/to/log和your_program_port等替换为实际的日志路径

    2024年01月21日
    浏览(43)
  • 苍穹外卖项目解读(四) 微信小程序支付、定时任务、WebSocket

    HM新出springboot入门项目《苍穹外卖》,笔者打算写一个系列学习笔记,“苍穹外卖项目解读”,内容主要从HM课程,自己实践,以及踩坑填坑出发,以技术,经验为主,记录学习,也希望能给在学想学的小伙伴一个参考。 注:本文章是直接拿到项目的最终代码,然后从代码出发

    2024年02月07日
    浏览(37)
  • kettle—bat文件Windows任务计划程序自动运行定时设置

    1.用kettle新建一个作业 2.把作业保存到你电脑上的任意文件夹内 3.新建一个bat文件(新建一个文本文档,后缀改为bat,右键编辑打开) 4.只需要改这三个地方,别的地方不用动 1.这个是你电脑kettle的安装路径 2.这个是你kettle作业的路径 3.这个是你kettle日志的路径(自己新建一个

    2024年02月01日
    浏览(63)
  • oracle定时任务的使用

    常见错误: 说明: 1、declare后面的 jobno 是一个数字类型,主要的用途是给定时器保存id,下面的job 引用此 jobno 。 2、job:输出变量,是此任务在任务队列中的编号; 3、what:执行的任务的名称及其输入参数; 4、next_date:任务执行的时间; 5、interval:任务执行的时间间隔。

    2024年02月07日
    浏览(32)
  • Django 如何使用 Celery 完成异步任务或定时任务

    以前版本的 Celery 需要一个单独的库(django-celery)才能与 Django 一起工作, 但从 Celery 3.1 开始,情况便不再如此,我们可以直接通过 Celery 库来完成在 Django 中的任务。 以 Docker 安装为例,安装一个密码为 mypassword 的 Redis 服务端 在 Django 项目中创建一个 celery.py 文件,并配置

    2023年04月25日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包