必须得创建好Mysql表
CREATE TABLE student (name VARCHAR(20),age INT);
读写代码
- 创建实体类
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- flink读写mysql代码
import org.apache.flink.api.common.functions.RichMapFunction;
import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.java.io.jdbc.JDBCAppendTableSink;
import org.apache.flink.api.java.io.jdbc.JDBCInputFormat;
import org.apache.flink.api.java.typeutils.RowTypeInfo;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.types.Row;
import java.util.Arrays;
public class FLink2Mysql {
private static String driverClass = "com.mysql.jdbc.Driver";
private static String dbUrl = "jdbc:mysql://localhost:3306/test";
private static String userName = "root";
private static String passWord = "123";
public static void main(String[] args) {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<Student> input = env.fromCollection(Arrays.asList(new Student("Tom", 25), new Student("Jack", 24)));
DataStream<Row> ds = input.map(new RichMapFunction<Student, Row>() {
@Override
public Row map(Student student) throws Exception {
return Row.of(student.getName(), student.getAge());
}
});
TypeInformation<?>[] fieldTypes = new TypeInformation<?>[]{
BasicTypeInfo.STRING_TYPE_INFO,
BasicTypeInfo.INT_TYPE_INFO
};
RowTypeInfo rowTypeInfo = new RowTypeInfo(fieldTypes);
//写入mysql(追加模式)
JDBCAppendTableSink sink = JDBCAppendTableSink.builder()
.setDrivername(driverClass)
.setDBUrl(dbUrl)
.setUsername(userName)
.setPassword(passWord)
.setParameterTypes(fieldTypes)
.setQuery("insert into student values(?,?)")
.build();
sink.emitDataStream(ds);
//查询mysql
JDBCInputFormat jdbcInputFormat = JDBCInputFormat.buildJDBCInputFormat()
.setDrivername(driverClass)
.setDBUrl(dbUrl)
.setUsername(userName)
.setPassword(passWord)
.setQuery("select * from student")
.setRowTypeInfo(rowTypeInfo)
.finish();
DataStreamSource<Row> input1 = env.createInput(jdbcInputFormat);
input1.print();
try {
env.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 查询mysql结果
后记
简易程度感觉和Spark还是有一定的差距,希望以后能更好的优化吧!