微服务 spring boot 译<六> Hello World

Hello World

如今咱们有了一个能够运行的 SpringBoot 应用程序,让咱们添加一些简单的功能。咱们但愿在 /api/hola 上公开一个 HTTP/REST 端点,它将返回 “Hola Spring Boot From X”,其中X是服务运行的IP地址。为此,请到 src/main/java/com/ 目录示例。若是您遵循前面的步骤,应该已经为您指定了这个位置;记住,咱们传递给 Springinit 程序的 group Id 并无将 group Id 应用到 Java 包层次结构中,咱们已经将其保留为“com.case”。而后建立一个名为 HolaRestController 的新Java类,如示例2-1所示。咱们将添加一个名为 hola() 的方法,该方法返回一个字符串以及服务运行位置的IP地址。在第5章中,在咱们的负载转换和服务发现部分中,您将看到如何使用主机IP来演示正确的故障转移、负载平衡等。java

例子 2-1  src/main/java/com/example/HolaRestController.javagit

增长 HTTP Endpointsgithub

此时,这段代码只是一个POJO(普通的传统Java对象),您能够(而且应该)编写一个单元测试来验证它的行为。为了将其公开为 REST 服务,咱们将在示例2-2中使用如下注释:spring

@RestController

这是一个HTTP控制器,可以公开HTTP端点(GET、PUT、POST等)。数据库

@RequestMapping

将HTTPURI路径的特定部分映射到Java代码中的类、方法和参数。api

注意,IMPORT语句被省略浏览器

Example 2-2. src/main/java/com/example/HolaRestController.javaspringboot

在这段代码中,咱们所作的就是添加前面提到的注释。例如,类级别的@RequestMap(“/api”)表示“映射此根URI路径下的任何方法级HTTP端点。”当咱们添加@RequestMap(Method=RequestMethod.GET,value=“/hola”,Products=“text/plain”)时,咱们告诉Spring在/hola(其实是/api/hola)公开一个HTTP GET 端点,并将媒体类型为Accept:text/Plain 的请求映射到此方法。SpringBoot默认使用嵌入的Tomcat servlet 容器,可是能够切换到其余选项,好比 Undertow 或 Jetty 。app

若是咱们构建应用程序并再次运行 Spring-start:Run,咱们应该可以到达咱们的HTTP端点:框架

$ mvn clean package spring-boot:run

如今,若是咱们将浏览器指向http://localhost:8080/api/hola,咱们应该看到相似于如下内容的响应:

若是咱们想向应用程序中添加一些环境感知的配置,该怎么办?例如,若是咱们将咱们的应用程序部署到用户的产品中,而不是说“hola”,也许咱们想说“guten tag”?咱们须要一种方法将属性注入到咱们的应用程序中。

Externalize Configuration

Spring Boot使使用外部属性源(如属性文件、命令行参数、OS环境或Java系统属性)变得容易。咱们甚至能够将整个属性“类”绑定到Spring上下文中的对象。例如,若是我想将全部helloapp.*属性绑定到HolaRestController,我能够添加@ConfigurationProperties(前缀=“helloapp”),SpringBoot将自动尝试将helloapp.foo和helloapp.bar绑定到HolaRestController类中的JavaBean属性。让咱们在src/main/Resources/applice.properties 中定义一个名为 helloapp.say 的新属性。properties文件是在建立项目时自动为咱们建立的。注意,咱们能够将文件名更改成 application.yml,Spring仍然会将其识别为YAML文件做为属性的来源。

让咱们向src/main/Resources/application.properties文件添加一个新属性:

helloapp.saying=Guten Tag aus

在示例2-3中的HolaRestController中,让咱们添加@ConfiguRationalProperties注释和新的Say字段。注意,咱们还须要setter和getter。

Example 2-3. src/main/java/com/example/HolaRestController.java

让咱们先中止应用程序的运行(若是尚未),而后从新启动它:

$ mvn clean package spring-boot:run

如今,若是咱们导航到http://localhost:8080/api/hola,咱们将看到谚语的德文版本:

咱们如今能够外部化属性,这取决于咱们运行的环境。服务URI、数据库URI和密码以及消息队列配置都是外部配置的最佳选择。可是,不要作得太过火;并非全部事情都须要根据运行环境的不一样而改变!理想状况下,应用程序在全部环境中的配置彻底相同,包括超时、线程池、重试阈值等。

Expose Application Metrics and Information

若是咱们想把这种微型服务投入生产,咱们将如何监测它?咱们怎样才能洞察到事情是如何进行的呢?除非咱们明确考虑如何向外部世界公开度量,不然咱们的微服务一般是黑匣子。spring boot 提供了一个预先包装好的起动器称为执行器,这使作这件事变得垂手可得。
让咱们看看须要什么来启用执行器。为您的hola-Spring微服务打开app.xml文件,并在<dependencies>...</dependencies>部分中添加如下 Maven 依赖项:

如今,经过中止并运行您的微服务,从新启动它:

$ mvn clean package spring-boot:run

经过添加执行器依赖项,咱们的应用程序如今已经公开了大量信息,这些信息对于调试或通常的微服务洞察很是方便。尝试访问如下URL并检查返回的内容:

• http://localhost:8080/beans

• http://localhost:8080/env
• http://localhost:8080/health

• http://localhost:8080/metrics

• http://localhost:8080/trace
• http://localhost:8080/mappings

下面是http://localhost:8080/env端点的一个示例。看起来是这样的:


这样公开运行时洞察力能够帮助开发人员集中精力为交付业务价值的微服务编写代码。将任务委托给框架来完成繁重的任务和样板工做绝对是个好主意。

How to Run This Outside of Maven?

到目前为止,咱们一直在从开发人员的笔记本电脑使用 Maven 的角度考虑开发和构建hello-world微服务。可是,若是您向其余人提供的微服务,仍是在实际环境(开发、QA、生产)中运行它?

幸运的是,有了SpringBoot,只须要几个步骤就能够为发布和生产作好准备。SpringBoot 更喜欢原子的、可执行的JAR,将全部依赖项打包到一个扁平的类路径中。这意味着咱们做为调用mvn clean package 打包建立的JAR是可执行的,而且包含了在Java环境中运行咱们的微服务所需的全部内容!要对此进行测试,请转到hola-Spring微服务项目的根目录,并运行如下命令:

$ mvn clean package
    $ java -jar target/hola-springboot-1.0.jar

若是您的项目名为DEMO,而不是hola-Spring启动,那么请替换正确命名的JAR文件(DEMO-1.0.jar)。

当咱们探索DropWizard和WildFly Swar时,咱们会注意到这种语法习惯

 

原文:

做者源码:https://github.com/redhat-developer/microservices-by-example-source

相关文章
相关标签/搜索