Flink写入mysql

Flink写入mysql其实也很简单,只用继承RichSinkFunction这个类,重写里面的方法就行了.具体的实现如下:

/**
  * 把结果保存到mysql里面
  */
class MySQLSink extends RichSinkFunction[List[ItemViewCount]] with Serializable {
  var connection: sql.Connection = _
  var ps: sql.PreparedStatement = _
  var statement: java.sql.Statement = _
  val username = "***"
  val password = "***"
  val drivername = "com.mysql.jdbc.Driver"
  val url = "***"

  /**
    * 打开mysql的连接
    * @param parameters
    */
  override def open(parameters: Configuration): Unit = {
    Class.forName(drivername)
    connection = DriverManager.getConnection(url, username, password)
    statement = connection.createStatement
    connection.setAutoCommit(false)
  }

  /**
    * 处理数据后写入mysql
    * @param value
    */
  override def invoke(value: List[ItemViewCount]): Unit = {
    val sql = "insert into topn(itemid,viewcount) values(?,?)"
    for (i <- value){
      ps = connection.prepareStatement(sql)
      ps.setLong(1, i.itemId)
      ps.setLong(2, i.viewCount)
      ps.execute()
      connection.commit()
    }
  }

  /**
    * 关闭mysql的连接
    */
  override def close(): Unit = {
    if (ps != null) {
      ps.close()
    }
    if (connection != null) {
      connection.close()
    }
  }
}

如果有写的不对的地方,欢迎大家指正,如果有什么疑问,可以加QQ群:340297350,更多的Flink和spark的干货可以加入下面的星球

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章