Java 如何使用重试策略重构方法。不使用第三方

Java 如何使用重试策略重构方法。不使用第三方,java,Java,我想知道如何使用retry lambda[不使用第三方重试引擎]重构此方法 (类似于lambda,它获取将作为参数传递到此方法的尝试次数,并以更具功能性的方式完成相同的操作 public static Connection createDbConnection( JobConfiguration jobConfiguration, ArrayList<String> hostsIps ) { Connection retConnection = null; Pro

我想知道如何使用retry lambda[不使用第三方重试引擎]重构此方法

(类似于lambda,它获取将作为参数传递到此方法的尝试次数,并以更具功能性的方式完成相同的操作

public static Connection createDbConnection( JobConfiguration jobConfiguration, ArrayList<String> hostsIps ) {

    Connection retConnection = null;

    Properties connectionProperties = new Properties();

    connectionProperties.put( "user", jobConfiguration.getDbConfiguration().getUserName() );
    connectionProperties.put( "password", jobConfiguration.getDbConfiguration().getPassword() );
    connectionProperties.put( "ConnectionLoadBalance", 1 );
    int attempts = 0;
    while ( ++attempts <= hostsIps.size() ) {
        try {
            String connectionString = String.format( "jdbc:vertica://%s:%s/%s",
                    hostsIps.get( attempts - 1),
                    jobConfiguration.getDbConfiguration().getPort(),
                    jobConfiguration.getDbConfiguration().getDbName());

            retConnection = DriverManager.getConnection
                    (
                            connectionString,
                            connectionProperties
                    );
            retConnection.setAutoCommit( false );
            break;
        } catch ( Exception ex ) {
            LOGGER.error( "Failed to connect to node - {}" + hostsIps.get( attempts - 1 ) + ex );
        }
    }
    return retConnection;
}
public静态连接createDbConnection(JobConfiguration JobConfiguration,ArrayList hostsIps){
连接retConnection=null;
Properties connectionProperties=新属性();
connectionProperties.put(“用户”,jobConfiguration.getDbConfiguration().getUserName());
connectionProperties.put(“password”,jobConfiguration.getDbConfiguration().getPassword());
connectionProperties.put(“ConnectionLoadBalance”,1);
int=0;

while(++尝试简化代码的主要方法是提取while循环中的所有代码,并将其放在单独的方法中,例如“tryConnect”。如果需要,可以使用lambda,如下所示:

Optional<Connection> retConnection = hostIps.stream().sequential()
    .map(ip -> tryConnect(ip, jobConfiguration, connectionProperties))
    .filter(Objects::nonNull).findFirst();
return retConnection.orElse(null);
Optional retConnection=hostIps.stream().sequential()
.map(ip->tryConnect(ip、作业配置、连接属性))
.filter(Objects::nonNull).findFirst();
返回retConnection.orElse(null);