繁体   English   中英

Java中基于属性文件的构建器模式

[英]Property file based builder pattern in java

我有一个属性文件,其中包含Elasticsearch主机名,端口号和方案的详细信息。

Elasticsearch RestCleint API提供了构造函数,以使用主机名以及主机名,端口号和方案实例化客户端对象。

在某些情况下,将应用程序部署到AWS时,只有一个URL可用作主机名。 部署在不同环境中的同一应用程序将具有所有3个属性。

因此,我创建了一个类,该类执行其他操作,并尝试根据可用性实例化RestClient。 该代码看起来非常丑陋。 我想使用一种Builder模式来优雅地处理这个问题。 但是,我无法实现它。 我想寻求帮助。

这就是我当前的实现方式。

public class ElasticSearchContext
{
private RestClient restClient;

public RestClient getContext() throws Exception
{
  if (PropertyFileReader.getInstance().containsKey("elasticsearchHostName") && 
      PropertyFileReader.getInstance().containsKey("elasticsearchPortNumber") && 
      PropertyFileReader.getInstance().containsKey("elasticsearchScheme"))
    {

      restClient = RestClient.builder(new HttpHost(PropertyFileReader.getInstance().getProperty("elasticsearchHostName"),
                                                   Integer.parseInt(PropertyFileReader.getInstance().getProperty("elasticsearchPortNumber")),
                                                   PropertyFileReader.getInstance().getProperty("elasticsearchScheme"))).build();

    }
  else if (PropertyFileReader.getInstance().containsKey("elasticsearchHostName") && 
           !PropertyFileReader.getInstance().containsKey("elasticsearchPortNumber") || 
           PropertyFileReader.getInstance().containsKey("elasticsearchScheme"))
    {
      restClient = RestClient.builder(new HttpHost(PropertyFileReader.getInstance().getProperty("elasticsearchHostName"))).build();
    }
  else
    {
      throw new Exception("Hostname is mandatory");
    }

  return restClient;

    }
}

这就是我的属性。

elasticsearchHostName=localhost
elasticsearchPortNumber=9200
elasticsearchScheme=http

我找到了答案。 这是运行时异常的典型情况。 例如,我们在Linux中运行命令ls -l|grep "pattern" 在这种情况下,Linux将不会引发异常。 它只是显示了使用指南。 同样,用户直到执行代码后才知道。 如果抛出异常,则无法通过代码或任何其他方式来处理。 除了抛出异常外,我们还应该帮助用户显示使用指南或一些有助于他理解代码崩溃原因的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM