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