基于Spring Boot和Spring Cloud实现微服务架构学习(三)-Spring Boot应用

原创 2016年07月21日 22:32:29

前言

我们知道Spring Boot 是 Spring 产品中一个新的子项目,致力于简便快捷地搭建基于 Spring 的独立可运行的应用。大多数的 Spring Boot 应用只需要非常少的 Spring 配置,并且这些都统一配置在application.yml中,极好的解决了各种配置文件的困扰。

说到这里,如果你觉得看英文文档很吃力,推荐一本老师推荐的书《JavaEE开发的颠覆者:Spring Boot实战》,这本书先是介绍Spring主流的一些框架,然后分别demo讲解Spring boot的各个依赖库,每个都不算太深,可以算是针对官网英文导读的一次翻译实现,对于入门我感觉是够了,毕竟我就是这样过来的。至于学习的深入,我个人是主张实战出真知,所以入门了就拿到项目中多用,这是个要长期总结的过程。

Spring Boot Starter 依赖库

上篇文章提过Spring Boot对Maven及Gradle等构建工具支持力度非常大。其内置一个’Starter POM’,对项目构建进行了高度封装,最大化简化项目构建的配置。作为一个微服务框架,Boot的很大一部分价值在于它能够无缝地为基于Maven和Gradle的项目提供各种构建工具。通过使用Spring Boot插件,就能够利用该框架的能力,将项目打包为一个轻量级的、可运行的部署包,而除此之外几乎不需要进行任何额外的配置。

作为一个框架,SpringBoot中内建了一些聚合模块,通常称为“启动者”。这些启动模块中是一些类库的已知的、良好的、具备互操作性的版本的组合,这些类库能够为应用程序提供某些方面的功能。Boot能够通过应用程序的配置对这些类库的进行设置,这也为整个开发周期中带来了配置胜于约定的便利性,达到开箱即用的微服务效果。下面就列出几个经典的Spring Boot Starter pom依赖库:

spring-boot-starter:Spring Boot核心Starter,包含自动配置、日志、yaml配置文件的支持
spring-boot-starter-amqb:使用spring-rabbit来支持AMQP
spring-boot-starter-web:支持全栈web开发,里面包括了Tomcat和Spring-webmvc。
spring-boot-starter-data-jpa:对JPA的支持,包含spring-data-jpa、spring-orm和Hibernate
spring-boot-starter-thymeleaf:对Thymeleaf模版引擎的支持,包含于Spring整合的配置
spring-boot-starter-ws: 提供对Spring Web Services的支持
spring-boot-starter-cloud-connectors:对云平台(Cloud Foundry、Heroku)提供的服务简化连接方式
spring-boot-starter-test:提供对常用测试框架的支持,包括JUnit,Hamcrest以及Mockito等。
spring-boot-starter-actuator:支持产品环境下的一些功能,比如管理应用、指标度量及监控等。
spring-boot-starter-jetty:支持jetty容器。
spring-boot-starter-log4j:引入默认的log框架(logback)

SpringBoot项目搭建过程

在官网导读,每个demo除了讲解怎么搭建外,还提供了GitHub的下载连接,支持直接clone运行体验。因为Spring Boot是新宠,它的JDK官方要求1.8以上版本,同时,Maven要3.0+或者Gradle2.3+,其他IDE没有限制,下面说下应用大致实现步骤,只是步骤,以Maven为例:

1、创建项目,添加依赖包。

一般情况下可以通过IDE创建Maven项目,自动生成各种路径的文件夹,当然也可以命令行(mkdir -p src/main/java/hello)手动一个个创建,然后修改pom.xml,引入依赖。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- spring boot基本环境 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.1.RELEASE</version>
    </parent>
 
    <groupId>spring.boot</groupId>
    <artifactId>cloud-simple-helloword</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>
    <name>cloud-simple-helloword</name>
    <dependencies>
        <!--web应用基本环境配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
            </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2、编写控制器和Make the application executable

  1. 控制器controller主要用于响应用户的情况,由注解@RestController指定;同时类或类下子方法可以通过注解@RequestMapping("/xxx")指定请求路径。

src/main/java/hello/GreetingController.java

package hello;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}

2、应用执行器由注解@SpringBootApplication实现,这个注解默认是集成了@Configuration、@EnableAutoConfiguration、@EnableWebMvc、@ComponentScan四个注解的功能,每个的功能从英文翻译上就能理解。

src/main/java/hello/Application.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3、部署spring boot应用

要部署运行spring boot应用,首选要打包spring boot应用,你在pom文件中看到的spring-boot-maven-plugin插件就是打包spring boot应用的。除了IDE的main Run方法,启动运行应用还有两种方式,一种是在工程目录执行mvn spring-boot:run启动,另一种则是先打成jar包,然后运行以Java方式运行jar,操作如下:

1)mvn clean package
2)java -jar target/gs-rest-service-0.1.0.jar

对应的Gradle依赖执行:./gradlew bootRun 另一种打jar操作:

1)./gradlew build
2)java -jar build/libs/gs-rest-service-0.1.0.jar 

注意Maven和Gradle生成的jar路径不同。如此,你就看到一个基于jar包的web应用启动了。

4、监控

Spring boot提供的一些开箱即用的应用非常容易使用,比如监控,你只需要在pom文件中引入:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
引入之后,spring boot是默认开启监控的,运行应用你可以在浏览器中输入:http://localhost:8080/health,就可以看到默认的监控信息了:
{"status":"UP","diskSpace":{"status":"UP","total":161067397120,"free":91618398208,"threshold":10485760}}

信息包括程序执行状态以及基本的磁盘信息。

5、应用Docker部署

对于多数Spring Boot微服务应用最终是要部署在Docker上,所以下一步我们应该编写Docker file文件,创建其镜像,然后Docker run运行镜像。这里所有Docker的操作,我会在Docker专题讲述。

Spring Boot的启动器Starter详解

Spring Boot的启动器Starter详解作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszsSpring Boot应用...
  • chszs
  • chszs
  • 2016年01月30日 10:15
  • 54045

spring-cloud-jpa

使用spring-cloud-jpa 1、配置jpa 在resource文件的yml文件下面创建jpa的ddl有多种选择 1、ddl-auto: create --这个参数设置后会每次启动自动...
  • popping_kai
  • popping_kai
  • 2017年05月21日 23:30
  • 1007

springboot(五):spring data jpa的使用

在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项前几篇文章地...
  • ityouknow
  • ityouknow
  • 2016年09月28日 10:56
  • 3059

基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

原文/项目 地址:https://github.com/sqshq/PiggyMetrics由于最近公司业务需要,需要基于Spring Cloud的微服务系统。遍访各大搜索引擎,发现国内资料少之又少,...
  • rickiyeat
  • rickiyeat
  • 2017年03月07日 23:39
  • 28731

基于Spring Boot和Spring Cloud实现微服务架构学习(二)-Spring Boot总结

基于Spring Boot和Spring Cloud框架开发的微服务架构学习(二) 对于Git、Docker容器技术,其与Spring Boot的关联度非常的高,大部分的应用都是托管在GitHub上,...
  • zeb_perfect
  • zeb_perfect
  • 2016年07月19日 22:57
  • 21589

Spring Boot 整合 MyBatis

前言 下面就讲解下 Springboot 如何整合 MyBatis,这里使用的是xml配置SQL而不是用注解。主要是 SQL 和业务代码应该隔离,方便和 DBA 校对 SQL。 项目源代码...
  • guoxiaodong2339
  • guoxiaodong2339
  • 2017年05月23日 09:32
  • 1825

使用IntelliJ IDEA中的Spring Initializr来快速构建Spring Boot/Cloud工程

我相信许多初学者都看了Spring Boot和Spring Cloud相关的博文中,都会涉及Spring Boot工程的创建的问题。而一般所看到的都是使用IntelliJ IDEA 工具来创建,并且方...
  • qq496013218
  • qq496013218
  • 2017年02月27日 11:43
  • 6406

springcloud微服务一:spring boot基础项目搭建及问题处理

公司接下来某个项目打算使用微服务架构,使用springcloud以及它集成的一些相关项目,因此虽然在其他方面的很多技术上还感觉急需提高,却又不得不以工作为重,先放下其他来了解一下这方面的技术。一番了解...
  • tuzongxun
  • tuzongxun
  • 2017年05月22日 12:31
  • 5549

从零开始: Spring Cloud微框架系列:spring boot

Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ————————————————————main———————————————————...
  • zhang275827743
  • zhang275827743
  • 2017年01月17日 13:00
  • 628
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Spring Boot和Spring Cloud实现微服务架构学习(三)-Spring Boot应用
举报原因:
原因补充:

(最多只允许输入30个字)