微服务 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来演示正确的故障转移、负载平衡等。

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

072541_Cne9_2277632.png

增加 HTTP Endpoints

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

@RestController

这是一个HTTP控制器,能够公开HTTP端点(GET、PUT、POST等)。

@RequestMapping

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

注意,IMPORT语句被省略

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

071508_KBJf_2277632.png

在这段代码中,我们所做的就是添加前面提到的注释。例如,类级别的@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 。

如果我们构建应用程序并再次运行 Spring-start:Run,我们应该能够到达我们的HTTP端点:

$ mvn clean package spring-boot:run

现在,如果我们将浏览器指向http://localhost:8080/api/hola,我们应该看到类似于以下内容的响应:

073127_o3Pc_2277632.png

如果我们想向应用程序中添加一些环境感知的配置,该怎么办?例如,如果我们将我们的应用程序部署到用户的产品中,而不是说“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

074005_KUU8_2277632.png

让我们先停止应用程序的运行(如果还没有),然后重新启动它:

$ mvn clean package spring-boot:run

现在,如果我们导航到http://localhost:8080/api/hola,我们将看到谚语的德文版本:

074102_Is22_2277632.png

我们现在可以外部化属性,这取决于我们运行的环境。服务URI、数据库URI和密码以及消息队列配置都是外部配置的最佳选择。但是,不要做得太过火;并不是所有事情都需要根据运行环境的不同而改变!理想情况下,应用程序在所有环境中的配置完全相同,包括超时、线程池、重试阈值等。

Expose Application Metrics and Information

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

075243_LxMs_2277632.png

现在,通过停止并运行您的微服务,重新启动它:

$ 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端点的一个示例。看起来是这样的:

080433_ya12_2277632.png


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

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时,我们会注意到这种语法习惯

 

原文:

074327_YDzp_2277632.png

074245_Ms19_2277632.png

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

转载于:https://my.oschina.net/u/2277632/blog/1788367

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值