1.引入依赖
<!--postgresql--> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.2</version> </dependency>
2.代码实现
public static boolean isTelnet(String url, int timeout){ String host=url.substring(0,url.indexOf(":")); int port=Integer.parseInt(url.substring(url.indexOf(":")+1)); Socket socket = new Socket(); boolean isConnected = false; try { // 建立连接 socket.connect(new InetSocketAddress(host, port),timeout); // 通过现有方法查看连通状态 // true为连通 isConnected = socket.isConnected(); } catch (IOException e) { // 当连不通时,直接抛异常,异常捕获即可 System.out.println(url+" telnet不通!"); }finally{ try { socket.close(); // 关闭连接 } catch (IOException e) { System.out.println("关闭连接失败!"); } } return isConnected; } public static void isMaster() throws ClassNotFoundException, SQLException { String driver="org.postgresql.Driver"; String urls="10.10.10.130:5432,10.10.10.131:5432,10.10.10.132:5432"; String name="admin"; String pwd="Admin@123456"; String database= "postgres"; int timeout=30; String[] urlString=urls.split(","); for (String url:urlString){ //先telnet一下看通不通 if(isTelnet(url,timeout)){ String jdbcUrl="jdbc:postgresql://"+url+"/"+database; Class.forName(driver); Connection connection= DriverManager.getConnection(jdbcUrl,name,pwd); String localRole = ""; String dbState = ""; //关键sql String sql = "select local_role, db_state from pg_stat_get_stream_replications();"; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { localRole=resultSet.getString("local_role"); dbState=resultSet.getString("db_state"); } //判断是否master,获取master的ip if(localRole.equalsIgnoreCase("Primary") && dbState.equalsIgnoreCase("Normal")){ System.out.println("postgres数据库集群的master节点为:"+url.substring(0,url.indexOf(":"))); } } } }