gpt4 book ai didi

java - 我如何使用重试策略重构方法。不使用第三方

转载 作者:行者123 更新时间:2023-11-30 06:51:33 25 4
gpt4 key购买 nike

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

(类似于 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;
}

你能帮忙吗?谢谢

最佳答案

简化代码的主要方法是提取 while 循环内的所有代码并将其放入单独的方法中,例如“尝试连接”。然后,如果需要,您可以使用 lambda,如下所示:

Optional<Connection> retConnection = hostIps.stream().sequential()
.map(ip -> tryConnect(ip, jobConfiguration, connectionProperties))
.filter(Objects::nonNull).findFirst();
return retConnection.orElse(null);

关于java - 我如何使用重试策略重构方法。不使用第三方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com