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

时间:2018-02-23 14:12:01

标签: java design-patterns properties-file

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

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

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

因此,我创建了一个类来执行其他操作,并尝试根据可用性实例化RestClient。代码看起来很丑陋。我想使用Builder类型的Pattern来优雅地处理它。但是,我无法实现它的想法。我想请求帮助。

这是我目前的实现方式。

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

1 个答案:

答案 0 :(得分:0)

我找到了答案。这是运行时异常的典型情况。例如,我们在Linux中运行命令ls -l|grep "pattern"。在这种情况下,Linux不会抛出异常。它只是显示使用指南。类似地,用户在执行代码之前不知道。如果我抛出异常,它既不能由代码处理,也不能以任何其他方式处理。我们应该帮助用户显示使用指南或帮助他理解代码崩溃原因的一些信息,而不是抛出异常。