更新时间:2024-01-23 GMT+08:00
分享

JDBC通过非ssl方式连接doris

在应用层进行代码重试和负载均衡时,代码重试需要应用自己多个配置doris前端节点地址。比如发现一个连接异常退出,就自动在其他连接上进行重试。

JDBC Connector

如果使用mysql jdbc connector来连接Doris,可以使用jdbc的自动重试机制:

 private static String URL = "jdbc:mysql:loadbalance://" +
        "cloudtable-2e68-ya-frontend-2-1-M07K7np5.mycloudtable.com:9030,cloudtable-2e68-ya-frontend-1-1-y5R8YNiy.mycloudtable.com:9030,cloudtable-2e68-ya-frontend-3-1-fGg7P4tA.mycloudtable.com:9030/demo?" +
        "loadBalanceConnectionGroup=first&ha.enableJMX=true";

样例代码:

public class Test {
    private static String URL = "jdbc:mysql:loadbalance://" +
        "FE1:9030,FE2:9030,FE3:9030/demo?" +
        "loadBalanceConnectionGroup=first&ha.enableJMX=true";
    static Connection getNewConnection() throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 认证用的密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
        // 本示例以密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量
        String password = System.getenv("USER_PASSWORD");
        return DriverManager.getConnection(URL, "admin", password);
    }
    public static void main(String[] args) throws Exception {
        Connection c = getNewConnection();
        while (true) {
            try {
                String query = "your sqlString";
                c.setAutoCommit(false);
                Statement s = c.createStatement();
                ResultSet resultSet = s.executeQuery(query);
                System.out.println("begin print");
                while(resultSet.next()) {
                    int id = resultSet.getInt(1);
                    System.out.println("id is: "+id);
                }
                System.out.println("end print");
                Thread.sleep(Math.round(100 * Math.random()));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

相关文档