flink中RichSinkFunction函数open、close、invoke方法分析—MysqlSinkJnupChnl类—转正项目解析:例子04

1.给出例子

broadcastDataStream.addSink(new RichSinkFunction() {
    @Override
    public void open(Configuration parameters) throws Exception {
        //连接资源
        super.open(parameters);
    }

    @Override
    public void close() throws Exception {
       //关闭资源、释放资源
        super.close();
    }
       //进行操作
    @Override
    public void invoke(ObjectB objectB, Context context) throws Exception {

    }
});

2.项目是利用如上框架进行改写:

(1)Class.froName装载一个类并且对其进行实例化

flink中RichSinkFunction函数open、close、invoke方法分析—MysqlSinkJnupChnl类—转正项目解析:例子04_第1张图片

这里的意思就是

Class.forName 传入 com.mysql.jdbc.Driver 之后,就知道我连接的数据库是 mysql

一个简单的例子:

import com.mysql.jdbc.Driver;
import java.sql.*;
  
    public class JdbcDemo {
        public static void main(String[] args) throws SQLException, ClassNotFoundException {
        String url = "jdbc:mysql://127.0.0.1:3306/mydb";
        String username = "root";
        String password = "redhat";
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(url, username, password);
        String sql = "SELECT * FROM msg";
        PreparedStatement prepareStatement = connection.prepareStatement(sql);
        ResultSet resultSet = prepareStatement.executeQuery();
        resultSet.next();
        String address = resultSet.getString("address");
        System.out.println(address);
    }
}

深入分析:

可见在源码中用了forName0方法:
flink中RichSinkFunction函数open、close、invoke方法分析—MysqlSinkJnupChnl类—转正项目解析:例子04_第2张图片

继续查看:
flink中RichSinkFunction函数open、close、invoke方法分析—MysqlSinkJnupChnl类—转正项目解析:例子04_第3张图片

到这里就结束了,

看看看官方文档的描述:

Returns the Class object associated with the class or interface with the given string name, using the given class loader. Given the fully qualified name for a class or interface (in the same format returned by getName) this method attempts to locate, load, and link the class or interface. The specified class loader is used to load the class or interface. If the parameter loader is null, the class is loaded through the bootstrap class loader. The class is initialized only if the initialize parameter is true and if it has not been initialized earlier.

大概翻译一下就是:返回一个给定类或者接口的一个 Class 对象,如果没有给定 classloader, 那么会使用根类加载器。如果 initalize 这个参数传了 true,那么给定的类如果之前没有被初始化过,那么会被初始化。我们在 JDBC 第一步的时候,传入的参数是 com.mysql.jdbc.Driver。也就是说这个类会被初始化。

(2)连接数据库

(3)数组方法:

flink中RichSinkFunction函数open、close、invoke方法分析—MysqlSinkJnupChnl类—转正项目解析:例子04_第4张图片

查看源码:
flink中RichSinkFunction函数open、close、invoke方法分析—MysqlSinkJnupChnl类—转正项目解析:例子04_第5张图片

返回当前pos数组。

你可能感兴趣的:(转正项目)