Flink读取Mysql数据并写入另一个数据库(JAVA)

使用是Flik自带的JDBCInputFormat和JDBCOutputFormat。
入门级的一个小demo,主要感受下FLink的功能。
功能实现,从一个数据库中读取数据,然后插入到另一个数据库中。

建了一件简单的表,建表语句如下:

CREATE TABLE `staff` (
  `name` varchar(20) NOT NULL,
  `age` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC

JAVA代码如下:


import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.io.jdbc.JDBCInputFormat;
import org.apache.flink.api.java.io.jdbc.JDBCOutputFormat;
import org.apache.flink.api.java.typeutils.RowTypeInfo;
import org.apache.flink.types.Row;

/**
 * 从数据库中读取一张表的数据打印出来。
 * 使用自带的JDBCInputFormat和JDBCOutputFormat
 * @author yishuiping
 * @date 2020/12/4 14:17
 */
public class ReadWriteMysqlByJDBC {
        public static void main(String[] args) throws Exception {
            ExecutionEnvironment fbEnv = ExecutionEnvironment.getExecutionEnvironment();
            //需要与SQL中获取的字段类型一一对应,否则会取不到值
            TypeInformation[] fieldTypes = new TypeInformation[] {
                    BasicTypeInfo.STRING_TYPE_INFO,
                    BasicTypeInfo.STRING_TYPE_INFO};
            RowTypeInfo rowTypeInfo = new RowTypeInfo(fieldTypes);

            //读mysql
            DataSet dataSource = fbEnv.createInput(JDBCInputFormat.buildJDBCInputFormat()
                    .setDrivername("com.mysql.jdbc.Driver")
                    .setDBUrl("jdbc:mysql://XXX.XX.XX.XX:3306/bdmdb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true")
                    .setUsername("XXXX")
                    .setPassword("XXXX")
                    .setQuery("select name,age from staff")
                    .setRowTypeInfo(rowTypeInfo)
                    .finish());

           
            System.out.println("总共查询出来的数据行:"+dataSource.count());
            dataSource.print();//此处打印

            //写MySQL
            dataSource.output(JDBCOutputFormat.buildJDBCOutputFormat()
                    .setDrivername("com.mysql.jdbc.Driver")
                    .setDBUrl("jdbc:mysql://XXX.XX.XX.XX:3307/bdmdb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true")
                    .setUsername("XXXX")
                    .setPassword("XXXXX")
                    .setQuery("insert into staff values(?,?)") 
                    .finish());

            fbEnv.execute();
        }

}

pom文件如下:


            org.apache.flink
            flink-java
            1.6.1
            
        
        
            org.apache.flink
            flink-streaming-java_2.11
            1.6.1
            
        
        
            org.apache.flink
            flink-jdbc
            1.6.4
        
        
            mysql
            mysql-connector-java
            5.1.25
        

结果如图,执行前查询源数据,和目标数据详情。


源数据.png

目标数据.png

执行后,目标数据如下:


结果数据.png

你可能感兴趣的:(Flink读取Mysql数据并写入另一个数据库(JAVA))