Externalize Configuration
Dropwizard 有许多配置内置组件(如servlet引擎或数据库数据源)的选项,以及创建可以使用配置文件运行和配置的全新命令的选项。我们还可以为那些希望根据运行环境进行更改的配置类型注入环境变量和系统属性。与SpringBoot一样,我们可以将整个属性类绑定到特定对象。在本例中,让我们将所有helloapp.*properties 绑定到 HolaRestResource 类。使用 SpringBoot,我们可以选择在带有键值元组的属性文件中编写配置文件。我们也可以使用YAML。对于 Dropwizard,我们只有YAML选项。
因此,让我们在根项目中创建一个名为conf/applica-tion.yml的文件(注意,如果不存在conf目录,则需要创建该目录)。我们将配置文件放在conf文件夹中,以帮助我们组织项目的不同配置文件(目录的命名并不重要(也就是说,它对 Dropwizard 没有任何传统意义)。让我们在conf/application.yml文件中添加一些配置:
在本例中,我们将属性设置为特定值。如果我们希望能够基于某些环境条件覆盖它呢?我们可以通过传入类似于Ddw.helloapp.say=guten标记的Java系统变量来重写它。请注意,系统属性名称的dw.*部分是重要的;它告诉Drop向导将该值应用于应用程序的一个配置设置。如果我们想根据OS环境变量的值重写属性,该怎么办?看上去像3-8的例子。
属性的值的模式是首先查看一个envi-ronment变量(如果存在的话)。如果环境变量未设置,则使用所提供的默认值。我们还需要明确地告诉我们的应用程序,我们想要使用环境变量的补充。在HolaDropwizardApplication类中,initialize()方法,看示例3-9。
现在我们已经设置了配置,让我们为它构建支持对象。我们有目的地创建了一个名为helloapp的子配置,它允许我们命名我们的配置来组织它们。我们可以将它保留为顶级配置项,但是由于我们没有这样做,让我们看看如何将应用程序.yml文件绑定到Dropwizard 配置对象。
让我们创建一个名为HelloSayingFactory的新类,它位于src/main/java/com/redhat/examples/Dropwizard/Resources目录中:
这是一个简单的JavaBean,带有一些验证(@NotEpty,来自Hibernate验证器库)和Jackson(@JsonProperty)注释。这个类在YAML文件中包装了HELLOAPP配置下的所有配置;现在,我们只需要“saying”。当我们第一次创建应用程序时,创建了一个HolaDropwi zardConfiguration类。让我们打开该类并添加新的HelloSayingFactory,如示例3-10所示。
最后,我们需要将配置注入HolaRestRe源代码(示例3-11)。
由于没有强制使用的神奇依赖注入框架,您需要更新HolaDropwizardApplication,以便向REST资源注入配置(示例3-12)。
现在,我们应该有一个相当复杂的配置注入能力可供我们使用。在本例中,我们有意地使它稍微复杂一些,以涵盖您在实际用例中可能会做的事情。还要注意的是,虽然将所有这些连接起来的机制更简单,但这里有一个非常清晰的模式:将我们的Java对象绑定到YAML配置文件,并使所有内容都非常简单和直观,而不需要利用复杂的框架。
让我们运行我们的应用程序。要做到这一点,让我们更新apor.xml以传递新的conf/application.yml文件,如示例3-13所示。
现在,我们可以从命令行运行:
在浏览器输入http://localhost:8080/api/hola:
如果我们停止微服务,并导出一个环境变量,我们应该会看到一句新的语句:
Expose Application Metrics and Information
默认情况下,在管理端口上启用了度量标准(默认情况下为8081),但是Dropwizard对我们的应用程序有什么具体的了解呢?让我们在HolaRestResources上添加几个声明性注释(示例3-14)。
我们添加了@Timed注释,它跟踪对服务的调用需要多长时间。用于收集指标的其他注释包括:
@Metered
调用服务率
@ExceptionMetered
抛出异常率
构建并重新启动您的微服务,并尝试在http://localhost:8080/api/hola上几次访问您的服务。然后,如果导航到http://localhost:8081/metrics?pretty=true,并滚动到底部(可能与您的不同),您应该会看到我们服务的度量值。
How to Run This Outside of Maven?
Dropwizard 将我们的微服务打包为一个可执行的 jar。我们所要做的就是构建我们的应用程序并像下面这样运行它:
下一节更加精彩!!!敬请期待
原文:
作者源码:https://github.com/redhat-developer/microservices-by-example-source