一、创建应用

使用官方Spring Initializr工具生成基础项目(http://start.spring.io/)

导入Intellij idea中

目录结构如下:

二、目录结构说明:

src/main/java:主程序入口Application,可以通过直接运行改类来启动SpringBoot 应用。

src/main/resources:配置目录,该目录用来存放应用的一些配置信息,比如应用名。服务端扣、数据库链接等。由于我们引入了Web模块,因此产生了static目录与template目录,或者用于存放静态资源,比如图片、CSS、JavaScript等;后者用于存放Web页面的模板文件。

src/test/:单元测试目录,生成的ApplicationTests通过JUnit4来实现,可以直接运行Spring Boot应用的测试。

三、Maven配置分析

 <?xml version="1.0" encoding="UTF-8"?>
<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> <groupId>com.slp</groupId>
<artifactId>springBoot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging><!--SpringBoot默认将Web应用打包为jar的形式,而非war的形式,因为默认的Web模块会依赖抱哈嵌入式的Tomcat,这样使得我们的jar自身具备提供web服务的能力。--> <name>springBoot</name>
<description>Demo project for Spring Boot</description> <parent>
<!--父项中定义了SpringBoot的版本的基础依赖以及一些默认配置信息,比如配置文件application.properties的位置等-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<!--全栈Web开发模块,包含嵌入式Tomcat SpringMVC-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<!--通用测试模块,包含JUnit Hamcrest Mockito-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

这里所引用的web和test模块,在Spring Boot生态中被称为Starter POMs.Starter POMS是一系列轻便的依赖包,是一套一站式的Spring相关技术的解决方案。

在使用和整合模块时,不需要再去搜寻样例代码中的依赖配置来复制使用,只需要引入对应的模块包即可。比如,开发Web应用的时候,那就再引入spring-boot-starter-web,希望具备数据库能力的时候就引入spring-boot-starter-jdbc,或者更好用的spring-boot-starter-data-jpa,在使用Spring Boot构建应用的时候,各项功能模块的整合不像传统Spring应用的开发方式那样,需要在pom.xml中做大量的依赖配置。而是通过Starter POMs定义的依赖包,使得功能整合变得非常轻巧,易于使用。

Spring Boot的Starter POMs采用spring-boot-starter-*的命名方式,*代表一个特别的应用功能模块,比如web test。Spring Boot工程本身的结构非常简单,大量的学习要点还是将来在对这些Starter POMs的使用之上。

项目构建的build部分,引入了SpringBoot的Maven插件,该插件非常实用,可以帮助我们更方便的启停应用,这样在开发时就不用每次去找主类火灾打包成ja来运行微服务,只需要mvn spring-boot:run命令就可以启动。

四、实现RESTful API

 package com.slp.web;

 import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @author sanglp
* @create 2018-06-28 8:39
* @desc 第一个 controller
**/ @RestController
public class HelloController {
@RequestMapping("/hello")
public String index(){
return "Hello World";
}
}

五。启动Spring Boot应用

1、作为一个Java应用程序,可以直接通过运行拥有main函数的类来启动

2、在Maven配置中,之前提到了spring-boot插件。可以使用它来启动,比如执行mvn spring-boot:run命令,或是直接单击IDE中对Maven插件的工具,例如Intellij中的支持

3、在服务器上部署时,通常先使用mvn install将应用打包成jar包,再通过java -jar xxx.jar来启动应用。

六、编写单元测试

package com.slp.springBoot;

import com.slp.web.HelloController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders; import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; //@RunWith(SpringRunner.class)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@WebAppConfiguration
public class ApplicationTests {
//模拟调用Controller的接口发起请求,在@Test定义的hello测试用例中,perform函数执行一次请求调用,accept用于执行接收的数据类型,ansExpect用于判断接口返回的期望值
private MockMvc mvc;
//JUnit中定义在测试用例@Test内容执行前预加载的内容,这里用来初始化HelloController的模拟
@Before
public void setUp() throws Exception{
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
} @Test
public void contextLoads() {
}
@Test
public void hello()throws Exception{
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andExpect(content().string(equalTo("Hello World"))); } }

【SpringCloud微服务实战学习系列】创建应用及解析的更多相关文章

  1. 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka

    Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...

  2. 【SpringCloud微服务实战学习系列】客户端负载均衡Spring Cloud Ribbon

    Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让我们轻松地将面向服务的RES模板 ...

  3. 【SpringCloud微服务实战学习系列】配置详解

    前言 Spring Boot针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板化配置内容. 一.配置文件 Spring Boot的默认配置文件位置为src/main.reso ...

  4. SpringCloud学习(SPRINGCLOUD微服务实战)一

    SpringCloud学习(SPRINGCLOUD微服务实战) springboot入门 1.配置文件 1.1可以自定义参数并在程序中使用 注解@component @value 例如 若配置文件为a ...

  5. springcloud微服务实战--笔记

    目前对Springcloud对了解仅限于:“用[注册服务.配置服务]来统一管理其他微服务” 这个水平.有待提高 Springcloud微服务实战这本书是翟永超2017年5月写的,时间已经过去了两年,略 ...

  6. SpringCloud微服务实战——第三章服务治理

    Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...

  7. SpringCloud微服务实战——搭建企业级开发框架(二):环境准备

    这里简单说明一下在Windows系统下开发SpringCloud项目所需要的的基本环境,这里只说明开发过程中基础必须的软件,其他扩展功能(Docker,k8s,MinIO,XXL-JOB,EKL,Ke ...

  8. Spring-cloud微服务实战【二】:eureka注册中心(上)

    ## 前言   本系列教程旨在为大家演示如何一步一步构建一整套微服务系统,至于其中的数据库用什么,订单ID如何保持唯一,分布式相关问题等等不在我们讨论范围内,本教程为了方便大家后续下载代码运行测试,不 ...

  9. Spring-cloud微服务实战【一】:微服务的概念与演进过程

    本文是一个系列文章,主要讲述使用spring-cloud进行微服务开发的实战.在开始之前,我们先说一下从传统的单一部署架构到微服务的发展过程,以便让童鞋们更好的理解微服务的概念与演进过程. 1.单体架 ...

随机推荐

  1. Radix-64编码简介

    本文介绍Radix-64编码,PGP和S/MIME均使用了Radix-64编码技术,rfc4880的Chap 6有关于Radix-64的详细描述. Radix-64编码基于Base64编码技术,由两部 ...

  2. KONG基础使用

    KONG是一个基于Nginx的API Gateway.提供了诸如身份认证,权限控制,流量控制,日志等一系列API相关的组件,可谓相当方便.KONG项目首页KONG入门KONG的Github地址KONG ...

  3. 原来找字也可以这样用ElseIf FindStr 手机按键精灵 跟大漠的区别

     原来找字也可以这样用ElseIf FindStr(646, 1109, 776, 1261, "公告小叉", "FFFFFF-333333", 0.9, in ...

  4. linux nginx,php开机启动

    nginx开机启动 1.首先,在linux系统的/etc/init.d/目录下创建nginx文件 vim /etc/init.d/nginx 2.加入脚本 #!/bin/bash # nginx St ...

  5. 【python】命令行输出颜色

    http://www.cnblogs.com/chjbbs/p/5706513.html

  6. python unittest 1

    今天开始研究python的unittest模块,为我们当前做的项目定制测试方案,包括unittest和自动化流程测试. python的unittest的基本使用方法如下:   1.import uni ...

  7. Android ScrollView 和ListView 一起使用的问题汇总

    1.ScrollView 嵌套 ListView  ,touch事件的截获问题. 参考 http://www.cnblogs.com/lqminn/archive/2013/03/02/2940194 ...

  8. smartgit 需要输入序列号解决办法

    找到路径: %APPDATA%\syntevo\SmartGit\<main-smartgit-version> 然后删除: settings.xml 再重新打开smartgit 就可以了

  9. Apache+php5

    .下载回来的是解压文件,解压好放到要安装的位置.(我这里以D:\Acpache24为例) .打开Apache24\conf下httpd.conf 文件,用记事本打开即可. ()第37行ServerRo ...

  10. python的初始化运行了哪些?

    下面的3个print一个是在模块下面,一个是函数里面,一个是类名下面(不在方法里面) 1. 运行这段代码可以发现第3行和11行可以打印出来.第7行没有打印出来.所以可以放心,函数或者方法里面就算有错误 ...