1 工程目录结构
pom.xml
com.alibaba
fastjson
1.2.56
org.apache.flink
flink-jdbc_2.11
1.9.2
2 flink 读取MySQL
1) 通过自定义source提交
MySQLSource
packagecom.atguigu.flink.sourceimportjava.sql.{Connection, DriverManager, PreparedStatement, ResultSet}importcom.atguigu.flink.bean.SensorReadingimportorg.apache.flink.configuration.Configurationimportorg.apache.flink.streaming.api.functions.source.{RichSourceFunction, SourceFunction}class MySQLSource extendsRichSourceFunction[SensorReading] {
var conn:Connection= nullvar ps:PreparedStatement= null
//流打开时操作
override def open(parameters: Configuration): Unit ={//加载驱动
Class.forName("com.mysql.jdbc.Driver")//数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/gmall1122?useSSL=false","root","123456")
ps= conn.prepareStatement("select * from sensor limit 5")
}//流运行时操作
override def run(sourceContext: SourceFunction.SourceContext[SensorReading]): Unit ={try{
var resultSet:ResultSet=ps.executeQuery()while(resultSet.next()){
var id:String= resultSet.getString("id")
var curTime:Long= resultSet.getLong("timestamp")
var timepreture:Double= resultSet.getDouble("timepreture")
sourceContext.collect(SensorReading(id,curTime,timepreture))
}
}catch{case _:Exception => 0}finally{
conn.close()
}
}//流关闭时操作
override def cancel(): Unit ={try{if(conn!=null){
conn.close()
}if(ps!=null){
ps.close()
}
}catch{case _:Exception => print("error")
}
}
}
主程序入口 MySQLSourceSinkApp
packagecom.atguigu.flink.appimportcom.atguigu.flink.bean.SensorReadingimportcom.atguigu.flink.sink.MySQLSinkimportcom.atguigu.flink.source.MySQLSourceimportorg.apache.flink.streaming.api.datastream.DataStreamimportorg.apache.flink.streaming.api.scalaimportorg.apache.flink.streaming.api.scala._
object MySQLSourceSinkApp {
def main(args: Array[String]): Unit={
val env: StreamExecut