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的乾貨可以加入下面的星球

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