Sink到mysql
依赖
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency>
示例
public class SinkMysql { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStreamSource<ProductInfo> streamSource = env.fromElements(new ProductInfo("水果", 4), new ProductInfo("文具", 5), new ProductInfo("书籍", 6)); String sql = "insert into product_category(category_name,category_type) values(?,?)"; JdbcConnectionOptions jdbcBuild = new JdbcConnectionOptions.JdbcConnectionOptionsBuilder() .withDriverName("com.mysql.jdbc.Driver") .withUrl("jdbc:mysql://localhost:3306/wechat_order?useUnicode=true&characterEncoding=utf-8&useSSL=false") .withUsername("admin").withPassword("admin").build(); streamSource.addSink(JdbcSink.sink(sql, (ps, productInfo) -> { ps.setString(1, productInfo.getCategoryName()); ps.setInt(2, productInfo.getCategoryType()); }, jdbcBuild)); env.execute("jdbc-connector"); } }
读取MySQL数据源
SourceFunction 定义两个接口方法:
1、run : 启动一个 source,即对接一个外部数据源然后 emit 元素形成 stream。
2、cancel : 取消一个 source,即将 run 中的循环 emit 元素的行为终止。
public class SourceFromMysql extends RichSourceFunction<ProductInfo> { private PreparedStatement ps; private Connection connection; @Override public void open(Configuration parameters) throws Exception { super.open(parameters); connection = getConnection(); String sql = "select * from product_category"; ps = connection.prepareStatement(sql); } @Override public void run(SourceContext<ProductInfo> ctx) throws Exception { ResultSet resultSet = ps.executeQuery(); while (resultSet.next()) { ProductInfo productInfo = new ProductInfo(resultSet.getString("category_name"), resultSet.getInt("category_type")); ctx.collect(productInfo); } } @Override public void cancel() { } @Override public void close() throws Exception { super.close(); if (connection != null) { connection.close(); } if (ps != null) { ps.close(); } } private static Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager .getConnection("jdbc:mysql://localhost:3306/wechat_order?useUnicode=true&characterEncoding=utf-8&useSSL=false", "admin", "admin"); } catch (Exception e) { //异常 } return conn; } }
立志如山 静心求实
浙公网安备 33010602011771号