zoukankan      html  css  js  c++  java
  • 微服务 SpringBoot 2.0(一):简单入门构建

    我做好了从入门到放弃的准备,你却告诉我炒鸡简单 —— Java面试必修

    引言

    SpringBoot是由Pivotal团队提供的全新框架,从最根本上来讲,Spring Boot就是简化开发人员从0构建项目的繁琐步骤,巧妙的封装了很多插件模块,让开发人员不再担心版本依赖或复杂的三方依赖问题,它能够被任意项目的构建系统所使用。

    入门项目

    接下来,我们什么都先不谈,本文着重介绍SpringBoot简单配置与服务搭建,预计花费您5分钟的阅读时间,动起来吧,非常非常简单噢。

    工具

    SpringBoot版本:2.0.4
    开发工具:IDEA 2018
    Maven:3.3 9
    JDK:1.8

    项目快速建立方式一:

    首先我们在SPRING INITIALIZR 上建一个简单项目,并导入到IDEA中,如下图:

     
    详见网址
     
    下一步,导入到工程
     
    下一步,选择已有模块
     
    下一步,更改maven变量
     
    下一步,选择JDK1.8目录
     
    简单项目建立完成
    项目快速建立方式二(常用):

    步骤 File—>New—>Project

     
    手动快速建立
     
    输入maven信息
     
    选择web,下一步

    下一步,然后直接完成,选择new window即可

     
    创建完成,下面我们解析刚刚涉及到的几个点

    工程结构

    DemoApplication.java:应用程序启动入口,可直接Run启动服务,类似于tomcat的start.sh
    DemoApplicationTests.java:Junit测试类,已自动注入加载了SpringBoot容器的上下文
    application.properties:配置属性空文件,可改为application.yml文件,SpringBoot都能识别
    pom.xml:maven工程定义文件,表明该项目的maven坐标信息

    疑问解析

    1. 构建项目时为何选择了Spring Initializr
      答:spring initializr 是Spring 官方提供的一个很好的工具,用来初始化一个Spring boot 的项目
    2. spring initializr有两种用法。一是在官网创建然后导入到编辑器,二是直接File->New->Project

    SpringBoot 之pom.xml

    以下简称xml,xml中与普通maven项目的xml无太多差异,如下:

     
    SpringBoot的pom.xml
    pom差异解析

    差异一. 引入了该parent说明具备了SpringBoot的基本功能,可直接依赖其父工程(SpringBoot)的包,如差异二(无需声明版本号)

    差异二. web应用启动核心jar,解压出来里面除了些依赖什么都没有,所以Starter主要用来简化依赖用的,比如我们之前做MVC时要引入日志组件,那么需要去找到log4j的版本,然后引入,现在有了Starter之后,直接用这个之后,log4j就自动引入了,也不用关心版本这些问题,注:若想更改其下某一个jar(如log4j)的版本,则可自行进行升降

    差异三. 能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用

    独特实现(不常用)

    如果你不想使用spring-boot-starter-parent,或您自己有一套parent依赖标准,您仍然可以通过使用scope = import依赖关系来保持依赖关系管理:

    <dependencyManagement>
         <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    该设置不允许您使用如上所述的属性(properties)覆盖各个依赖项,要实现相同的结果,您需要在spring-boot-dependencies项之前的项目的dependencyManagement中添加一个配置,例如,要升级到另一个Spring Data版本系列,您可以将以下内容添加到自己的pom.xml中。

    <dependencyManagement>
        <dependencies>
            <!-- Override Spring Data release train provided by Spring Boot -->
    
            <!--Spring Data版本更改至Kay-SR9 |变更部分  start-->
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-releasetrain</artifactId>
                <version>Kay-SR9</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <!--注意:需啊哟在spring-boot-dependencies之前加入需更改的   |变更部分 end -->
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    
    
        </dependencies>
    </dependencyManagement>

    此处详见官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-yaml-shortcomings 模块:13.2.2 Using Spring Boot without the Parent POM

    常用依赖模块

    Spring Boot提供了很多已封装好的模块,类似于插件,拿来即用,大多都是spring-boot-starter-xx风格,如果要用直接引入即可,就像组装电脑,组装i3还是装i5的CPU看你 自己,下面我们随便举例几个:

    <!--快速web应用开发-->
    <artifactId>spring-boot-starter-web</artifactId>
    
    <!--redis缓存服务-->
    <artifactId>spring-boot-starter-redis</artifactId>
    
    <!--应用日志-->
    <artifactId>spring-boot-starter-logging</artifactId>
    
    <!--容器层约定和定制-->
    <artifactId>spring-boot-starter-jetty</artifactId>
    <artifactId>spring-boot-starter-undertow</artifactId>
    
    <!--数据库访问-->
    <artifactId>spring-boot-starter-jdbc</artifactId>
    
    <!--面向切面-->
    <artifactId>spring-boot-starter-aop</artifactId>
    
    <!--应用安全-->
    <artifactId>spring-boot-starter-security</artifactId>

    应用演示

    以我们刚刚新建的DemoApplication.java为例
    1.pom.xml文件加入web服务插件(呀,是谁这么聪明,以前弄个springmvc一套下来10来个jar,现在只管一个了)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    1. 我们直接在注解上面加入@RestController,并且加入一个RequestMapping方法,启动服务器之后,我们访问这个方法即可看到效果
    package com.ron.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @SpringBootApplication
    public class DemoApplication {
    
        @RequestMapping("/index")
        public String index(){
            return "Hello Spring Boot";
        }
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
    
        }
    }
    1. @RestController注解等价于@Controller+@ResponseBody的结合,使用这个注解的类里面的方法都以json格式输出
    2. @SpringBootApplication是Sprnig Boot项目的核心注解,主要目的是开启自动配置。后续讲解原理的时候深入介绍。
    3. main方法这是一个标准的Java应用的main的方法,主要作用是作为项目启动的入口。
    run运行
     
    启动成功
    打开浏览器访问
     
    成功访问

    单元测试场景

    找到项目目录了src/test/下的测试入口,编写简单的http请求来测试;使用mockmvc进行,利用MockMvcResultHandlers.print()打印出执行结果。

    package com.ron.demo;
    
    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.SpringRunner;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
    import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class DemoApplicationTests {
    
        private MockMvc mvc;
        @Before
        public void setUp() throws Exception {   <!--此处为需要测试的Controller类-->
            mvc = MockMvcBuilders.standaloneSetup(new DemoApplication()).build();
        }
    
        @Test
        public void contextLoads() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/index").accept(MediaType.APPLICATION_JSON))
                    .andExpect(MockMvcResultMatchers.status().isOk())
                    .andDo(MockMvcResultHandlers.print())
                    .andReturn();
    
        }
    
    }

    直接在DemoApplicationTests 中 Ctrl+Shift+F10运行即可看到如下运行结果,若报错请仔细检查@Before方法

     
    控制台运行结果

    热部署配置(会重启)

    工欲善其事,必先利其器。在开发的时候,难免会反复进行修改调试,就目前而言,修改了代码后是无法直接编译生效,所以需要我们添加以下依赖,添加后一定要确保已经依赖噢

    1. 添加如下依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>

    2.plugin中加入如下

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
    
                    <!--加入部分 start-->
                    <configuration>
                        <fork>true</fork>
                    </configuration>
                    <!--加入部分 end-->
    
                </plugin>
            </plugins>
        </build>
    1. 第三步修改IDE


       
      settings
     
    Registry

    设置完成后重启IDEA即可,本操作在修改代码之后只会做到自动启动服务

    总结

    会使用SpringBoot之后,老板再也不用担心我写代码的速度,总结下来就是简单、快速、方便!平时如果我们需要搭建一个spring web项目的时候准备依赖包都要很大一部分时间,现在都不用啦。


    作者有话说:喜欢的话就请移步Java面试必修网 https://www.itmsbx.com ,请自备水,更多干、干、干货等着你

  • 相关阅读:
    Ubuntu Docker 安装
    apt安装 E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
    Ubuntu18.04 网路图标消失连接不上网
    Liunx 安装配置NFS服务,挂载目录
    python shutil包 文件/目录的复制,移动
    python urllib包 实现通过http下载文件
    MAC上的Terminal光标快捷键
    Safari下载zip文件后不再自动打开
    Wordpress: contact form 7 表单内容同行
    Zoi选项 — Insure抑制功能
  • 原文地址:https://www.cnblogs.com/itmsbx/p/9704069.html
Copyright © 2011-2022 走看看