89 lines
2.5 KiB
Java
89 lines
2.5 KiB
Java
package com.thinker.sql;
|
|
|
|
import com.thinker.model.Student;
|
|
import org.apache.flink.configuration.Configuration;
|
|
import org.apache.flink.streaming.api.functions.source.RichSourceFunction;
|
|
import org.apache.flink.streaming.api.functions.source.SourceFunction;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.DriverManager;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
|
|
/**
|
|
* @author zeekling [lingzhaohui@zeekling.cn]
|
|
* @version 1.0
|
|
* @apiNote
|
|
* @since 2020-05-05
|
|
*/
|
|
public class SourceFromMySQL extends RichSourceFunction<Student> {
|
|
|
|
|
|
private PreparedStatement ps;
|
|
private Connection connection;
|
|
|
|
/**
|
|
* open() 方法中建立连接,这样不用每次 invoke 的时候都要建立连接和释放连接。
|
|
*
|
|
* @param parameters
|
|
* @throws Exception
|
|
*/
|
|
@Override
|
|
public void open(Configuration parameters) throws Exception {
|
|
super.open(parameters);
|
|
connection = getConnection();
|
|
String sql = "select * from Student;";
|
|
ps = this.connection.prepareStatement(sql);
|
|
}
|
|
|
|
/**
|
|
* 程序执行完毕就可以进行,关闭连接和释放资源的动作了
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
@Override
|
|
public void close() throws Exception {
|
|
super.close();
|
|
if (connection != null) { //关闭连接和释放资源
|
|
connection.close();
|
|
}
|
|
if (ps != null) {
|
|
ps.close();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* DataStream 调用一次 run() 方法用来获取数据
|
|
*
|
|
* @param ctx
|
|
* @throws Exception
|
|
*/
|
|
@Override
|
|
public void run(SourceContext<Student> ctx) throws Exception {
|
|
ResultSet resultSet = ps.executeQuery();
|
|
while (resultSet.next()) {
|
|
Student student = new Student(
|
|
resultSet.getInt("id"),
|
|
resultSet.getString("name").trim(),
|
|
resultSet.getString("password").trim(),
|
|
resultSet.getInt("age"));
|
|
ctx.collect(student);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void cancel() {
|
|
}
|
|
|
|
private static Connection getConnection() {
|
|
Connection con = null;
|
|
try {
|
|
Class.forName("com.mysql.jdbc.Driver");
|
|
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/flink_test?useUnicode=true&characterEncoding=UTF-8", "root", "123456");
|
|
} catch (Exception e) {
|
|
System.out.println("-----------mysql get connection has exception , msg = "+ e.getMessage());
|
|
}
|
|
return con;
|
|
}
|
|
}
|