Java微服务开发指南-使用Spring Boot构建微服务

    Spring Boot是一个广泛用来构建Java微服务的框架,它基于Spring依赖注入框架来进行工作。Spring Boot允许开发人员使用更少的配置来构建微服务,同时框架本身能够尽可能的减少开发人员的冲突,它和我们后面要介绍的两个框架类似,它通过以下几个方面帮助开发人员:

  • 自动化配置,一般情况下都有默认配置
  • 提供一组流行的starter依赖,方便开发人员使用
  • 简化应用打包
  • 提升应用运行时的内省性(例如:Metrics与环境信息)

简化的配置

    Spring以噩梦般的配置而闻名,虽然框架本身相比其他组件模型(EJB 1.x 和 2.x)简单了不少,但是它也带来了自己的配置模式。也就是说,如果想要正确的使用Spring,你需要深入了解如何进行XML配置、了解JdbcTemplateJmsTemplate以及BeanFactory生命周期、了解Servlet监听器,你以为掌握了这些就可以开始开发了吗?实际上问题远没有结束,如果你要用Spring MVC编写一个简单的hello world,你还需要了解DispatcherServlet和一堆Model-View-Controller相关的类型。

    Spring Boot目标就是消除掉这些与业务无关的配置和概念,通过简单的注解,你就能够完成这些工作,当然如果你想继续想以前一样使用Spring,它也不会拦着你。

Starter依赖

    Spring广泛使用着,包括了大型企业应用,在应用中,用户将会使用到不同的技术组件,包括:JDBC数据源、消息队列、文件系统以及应用缓存等。开发人员需要在需要这些功能时,停下来,仔细分析一下自己究竟需要什么?需要的内容属于哪个依赖(“哦,我需要JPA依赖”),然后花费大量的时间在依赖组织和排除上。

    Spring Boot提供了功能域(一批jar包依赖)的依赖,它让开发人员声明需要的功能,而不用去关系究竟如何处理依赖关系。这些starter可以允许开发人员直接使用这些功能:

  • JPA持久化
  • NoSQL数据库支持,例如:MongoDB、Cassandra或者CouchBase
  • Redis缓存
  • Tomcat、Jetty或者Undertow的Servlet引擎
  • JTA事务

    通过直接添加一个starter,能够让开发人员获得这个特性相关的一组依赖,而这些依赖的组合已经被验证,省却了开发人员的不少时间。

应用打包

    Spring Boot是一组jar包和符合其约定的配置的构建块,因此它不会运行在现有的应用服务器中,而使用Spring Boot的大多数开发人员更喜欢的是直接运行的这种自包含的jar包。这意味着Spring Boot将所有的依赖和应用程序代码都包装到一个自包含的jar中,而这些jar包运行在一个平面的类加载器中。简单的类加载体系使得开发人员更容易理解应用程序的启动、依赖关系和日志输出,但更重要的是,它有助于减少应用从构建到生产环境的步骤数量。这意味着开发人员不必将打包好的应用放置到应用服务器中,而是直接运行这个standalone的应用,如果你需要servlet,那么完全可以将其打包在应用内,使其为你服务。

    没错,一个简单的java -jar <name.jar>就可以启动你的应用了!Spring Boot、Dropwizard和WildFly Swarm都遵循将所有内容打包成可执行的jar模式。但是传统的应用服务器包含的管理能力,怎么在这种模式下实现呢?

为生产环境而准备

    Spring Boot推出了一个叫做actuator的模块,它可以实现应用的指标统计。例如:我们可以收集日志、查看指标、生成执行线程dump、显示环境变量、了解gc以及显示BeanFactory中配置的bean。可以通过HTTP或者JMX暴露这些信息或者进行日志输出。借助Spring Boot,我们可以利用Spring框架的功能、减少配置并快速开发应用并上线。

    说了这么多,让我们看看怎么使用它。

开始使用

我们接下来使用Spring Boot的命令行工具(CLI)来创建第一个Spring Boot程序(CLI底层使用了Spring Initializer)。你也可以使用自己喜欢的方式,比如使用集成了Spring Initializer的IDE,或者直接访问web来创建一个工程。

Spring Boot CLI 的安装方式,可以参考 这里

Homebrew下:
brew tap pivotal/tap
brew install springboot

    一旦你安装了Spring Boot CLI,你可以这样检查一下。

$ spring --version
Spring CLI v1.5.4.RELEASE

    如果你能看到版本的输出,恭喜你,安装成功了。接下来,在你希望创建工程的目录下运行命令:spring init --build maven --groupId com.murdock.examples --version 1.0 --java-version 1.8 --dependencies web --name hola-springboot hola-springboot

在microservices-camp下运行。

    运行该命令后,将会在当前目录下创建一个hola-springboot目录,同时该目录下包含了一个完整的Spring Boot程序,简单的介绍一下这个命令中包含的内容。

  • –build
    使用的构建工具,示例中是:maven
  • –groupId
    maven坐标中的组Id,也就是代码的包名,如果你想改包名,只有在IDE中修改
  • –version
    maven坐标中的version
  • –java-version
    Java版本
  • –dependencies
    这是一个有趣的参数,我们可以指定某种开发类型的依赖。比如:web就是指当前项目使用Spring MVC框架,默认基于内嵌的Tomcat(Jetty和Undertow作为可选)。其他的依赖或者starter,比如:jpasecuritycassandra

    进入到hola-springboot目录中, 执行命令:mvn spring-boot:run,如果程序启动,没有报错,你就能看到如下的日志:

2017-06-18 10:46:51.070  INFO 3397 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2017-06-18 10:46:51.081  INFO 3397 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
2017-06-18 10:46:51.253  INFO 3397 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-06-18 10:46:51.262  INFO 3397 --- [           main] c.m.e.h.HolaSpringbootApplication        : Started HolaSpringbootApplication in 13.988 seconds (JVM running for 17.985)

    恭喜你!你快速的创建了一个Spring Boot应用,并且启动了它,你甚至可以访问http://localhost:8080,你会看到如下内容

    可以看到返回了默认的出错页面,到目前为止,它除了这个什么也做不了。接下来,我们就添加一些特性,比如:REST访问,做一个helloworld式的应用。

后续实践内容与原文有不同,在操作性上要比原文具备更好的实践性。

你好,世界

    现在我们拥有了一个可以运行的Spring Boot应用,让我们为它添加一些简单的功能。首先,我们想做的是,让应用暴露一个位置是api/holaV1HTTP/REST端点,访问它将返回 Hola Spring Boot @ X,而其中的 X 是运行应用的本机IP。

    在编写代码前,先将hola-springboot导入到IDE中,在com.murdock.examples.holaspringboot包下面建立一个类,名称为HolaRestControllerV1

public class HolaRestControllerV1 {
   

    public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值