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