zoukankan      html  css  js  c++  java
  • 【SpringCloud微服务实战学习系列】创建应用及解析

    一、创建应用

    使用官方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配置分析

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     4     <modelVersion>4.0.0</modelVersion>
     5 
     6     <groupId>com.slp</groupId>
     7     <artifactId>springBoot</artifactId>
     8     <version>0.0.1-SNAPSHOT</version>
     9     <packaging>jar</packaging><!--SpringBoot默认将Web应用打包为jar的形式,而非war的形式,因为默认的Web模块会依赖抱哈嵌入式的Tomcat,这样使得我们的jar自身具备提供web服务的能力。-->
    10 
    11     <name>springBoot</name>
    12     <description>Demo project for Spring Boot</description>
    13 
    14     <parent>
    15         <!--父项中定义了SpringBoot的版本的基础依赖以及一些默认配置信息,比如配置文件application.properties的位置等-->
    16         <groupId>org.springframework.boot</groupId>
    17         <artifactId>spring-boot-starter-parent</artifactId>
    18         <version>2.0.3.RELEASE</version>
    19         <relativePath/> <!-- lookup parent from repository -->
    20     </parent>
    21 
    22     <properties>
    23         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    24         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    25         <java.version>1.8</java.version>
    26     </properties>
    27 
    28     <dependencies>
    29         <dependency>
    30             <!--全栈Web开发模块,包含嵌入式Tomcat SpringMVC-->
    31             <groupId>org.springframework.boot</groupId>
    32             <artifactId>spring-boot-starter-web</artifactId>
    33         </dependency>
    34 
    35         <dependency>
    36             <!--通用测试模块,包含JUnit  Hamcrest Mockito-->
    37             <groupId>org.springframework.boot</groupId>
    38             <artifactId>spring-boot-starter-test</artifactId>
    39             <scope>test</scope>
    40         </dependency>
    41     </dependencies>
    42 
    43     <build>
    44         <plugins>
    45             <plugin>
    46                 <groupId>org.springframework.boot</groupId>
    47                 <artifactId>spring-boot-maven-plugin</artifactId>
    48             </plugin>
    49         </plugins>
    50     </build>
    51 
    52 
    53 </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

     1 package com.slp.web;
     2 
     3 import org.springframework.web.bind.annotation.RequestMapping;
     4 import org.springframework.web.bind.annotation.RestController;
     5 
     6 /**
     7  * @author sanglp
     8  * @create 2018-06-28 8:39
     9  * @desc 第一个 controller
    10  **/
    11 
    12 @RestController
    13 public class HelloController {
    14     @RequestMapping("/hello")
    15     public String index(){
    16         return "Hello World";
    17     }
    18 }

    五。启动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")));
    
        }
    
    }
  • 相关阅读:
    mssql锁
    gridview 分页兼容BOOTSTRAP
    BOOTSTRAP前端模板
    bootstrap 简单模板
    ajax 跨域访问的解决方案
    webapi之权限验证
    webapi权限常见错误
    ajax跨域解决方案
    iis 部署webapi常见错误及解决方案
    OOM AutoMapper的简单实用
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/9235260.html
Copyright © 2011-2022 走看看