有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发、调试、打包到最后的投产上线。
  
  开发阶段
  
  单元测试
  
  在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了。
  
  1、在pom包中添加spring-boot-starter-test包引用
  
  <dependency>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-starter-test</artifactId>
  
  <scope>test</scope>
  
  </dependency>
  
  2、开发测试类
  
  以最简单的helloworld为例,在测试类的类头部需要添加:@RunWith(SpringRunner.class)和@SpringBootTest注解,在测试方法的顶端添加@Test即可,最后在方法上点击右键run就可以运行。
  
  @RunWith(SpringRunner.class)
  
  @SpringBootTest
  
  public class ApplicationTests {
  
  @Test
  
  public void hello() {
  
  System.out.println("hello world");
  
  }
  
  }
  
  实际使用中,可以按照项目的正常使用去注入dao层代码或者是service层代码进行测试验证,spring-boot-starter-test提供很多基础用法,更难得的是增加了对Controller层测试的支持。
  
  //简单验证结果集是否正确
  
  Assert.assertEquals(3, userMapper.getAll().size());
  
  //验证结果集,提示
  
  Assert.assertTrue("错误,正确的返回值为200", status == 200);
  
  Assert.assertFalse("错误,正确的返回值为200", status != 200);
  
  引入了MockMvc支持了对Controller层的测试,简单示例如下:
  
  public class HelloControlerTests {
  
  private MockMvc mvc;
  
  //初始化执行
  
  @Before
  
  public void setUp() throws Exception {
  
  mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
  
  }
  
  //验证controller是否正常响应并打印返回结果
  
  @Test
  
  public void getHello() throws Exception {
  
  mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
  
  .andExpect(MockMvcResultMatchers.status().isOk(www.027yeshenghuowang.com/))
  
  .andDo(MockMvcResultHandlers.print())
  
  .andReturn();
  
  }
  
  //验证controller是否正常响应并判断返回结果是否正确
  
  @Test
  
  public void testHello() throws Exception {
  
  mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
  
  .andExpect(status().isOk(http://xucaizxyl.com/))
  
  .andExpect(content().string(equalTo("Hello World")http://www.wbjyl.cn/));
  
  }
  
  }
  
  单元测试是验证你代码第一道屏障,要养成每写一部分代码就进行单元测试的习惯,不要等到全部集成后再进行测试,集成后因为更关注整体运行效果,很容易遗漏掉代码底层的bug.
  
  集成测试
  
  整体开发完成之后进入集成测试,spring boot项目的启动入口在 Application类中,直接运行run方法就可以启动项目,但是在调试的过程中我们肯定需要不断的去调试代码,如果每修改一次代码就需要手动重启一次服务就很麻烦,spring boot非常贴心的给出了热部署的支持,很方便在web项目中调试使用。
  
  pom需要添加以下的配置:
  
  <dependencies>
  
  <dependency>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-devtools<http://www.yigouyule2.cn/ /artifactId>
  
  <optional>true</optional>
  
  </dependency>
  
  </dependencies>
  
  <build>
  
  <plugins>
  
  <plugin>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-maven-plugin</artifactId>
  
  <configuration>
  
  <fork>true</fork>
  
  </configuration>
  
  </plugin>
  
  </plugins>
  
  </build>
  
  添加以上配置后,项目就支持了热部署,非常方便集成测试。
  
  投产上线
  
  其实我觉得这个阶段,应该还是比较简单一般分为两种;一种是打包成jar包直接执行,另一种是打包成war包放到tomcat服务器下。
  
  打成jar包
  
  如果你使用的是maven来管理项目,执行以下命令既可以
  
  cd 项目跟目录(和pom.xml同级)
  
  mvn clean package
  
  ## 或者执行下面的命令
  
  ## 排除测试代码后进行打包
  
  mvn clean package -Dmaven.test.skip=true
  
  打包完成后jar包会生成到target目录下,命名一般是 项目名+版本号.jar
  
  启动jar包命令
  
  java -jar target/spring-boot-scheduler-1.0.0.jar
  
  这种方式,只要控制台关闭,服务就不能访问了。下面我们使用在后台运行的方式来启动:
  
  nohup java -jar target/spring-boot-scheduler-1.0.0.jar &
  
  也可以在启动的时候选择读取不同的配置文件
  
  java -jar app.jar --spring.profiles.active=dev
  
  gradle
  
  如果使用的是gradle,使用下面命令打包
  
  gradle build
  
  java -jar build/libs/mymodule-0.0.1-SNAPSHOT.jar
  
  打成war包
  
  打成war包一般可以分两种方式来实现,第一种可以通过eclipse这种开发工具来导出war包,另外一种是使用命令来完成,这里主要介绍后一种
  
  1、maven项目,修改pom包
  
  将
  
  <packaging>jar</packaging>
  
  改为
  
  <packaging>war</packaging>
  
  2、打包时排除tomcat.
  
  <dependency>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-starter-web</artifactId>
  
  </dependency>
  
  <dependency>
  
  <groupId>org.springframework.boot</groupId>
  
  <artifactId>spring-boot-starter-tomcat</artifactId>
  
  <scope>provided</scope>
  
  </dependency>
  
  在这里将scope属性设置为provided,这样在最终形成的WAR中不会包含这个JAR包,因为Tomcat或Jetty等服务器在运行时将会提供相关的API类。
  
  3、注册启动类
  
  创建ServletInitializer.java,继承SpringBootServletInitializer ,覆盖configure(),把启动类Application注册进去。外部web应用服务器构建Web Application Context的时候,会把启动类添加进去。
  
  public class ServletInitializer extends SpringBootServletInitializer {
  
  @Override
  
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
  
  return application.sources(Application.class);
  
  }
  
  }
  
  最后执行
  
  mvn clean package -Dmaven.test.skip=true
  
  会在target目录下生成:项目名+版本号.war文件,拷贝到tomcat服务器中启动即可。
  
  gradle
  
  如果使用的是gradle,基本步奏一样,build.gradle中添加war的支持,排除spring-boot-starter-tomcat:
  
  ...
  
  apply plugin: 'war'
  
  ...
  
  dependencies {
  
  compile("org.springframework.boot:spring-boot-starter-web:1.4.2.RELEASE"){
  
  exclude mymodule:"spring-boot-starter-tomcat"
  
  }
  
  }
  
  ...
  
  再使用构建命令
  
  gradle build
  
  war会生成在build\libs 目录下。
  
  生产运维
  
  查看JVM参数的值
  
  可以根据java自带的jinfo命令:
  
  jinfo -flags pid
  
  来查看jar 启动后使用的是什么gc、新生代、老年代分批的内存都是多少,示例如下:
  
  -XX:CICompilerCount=3 -XX:InitialHeapSize=234881024 -XX:MaxHeapSize=3743416320 -XX:MaxNewSize=1247805440 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=78118912 -XX:OldSize=156762112 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
  
  -XX:CICompilerCount :最大的并行编译数
  
  -XX:InitialHeapSize 和 -XX:MaxHeapSize :指定JVM的初始和最大堆内存大小
  
  -XX:MaxNewSize : JVM堆区域新生代内存的最大可分配大小
  
  ...
  
  -XX:+UseParallelGC :垃圾回收使用Parallel收集器

在pom包中添加spring-boot-starter-test包引用的更多相关文章

  1. SpringBoot 之Spring Boot Starter依赖包及作用

    Spring Boot 之Spring Boot Starter依赖包及作用 spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. spri ...

  2. step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework

    文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...

  3. 在pom.xml中添加Spring依赖

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  4. 在Docker容器中运行Spring Boot的jar包 jar外的配置文件无法生效

    Spring Boot加载配置文件,默认会从几个固定位置搜索一下看看有没有配置文件 ——application.properties或者bootstrap.properties(如果你使用了sprin ...

  5. SpringBoot 之Spring Boot Starter依赖包及作用(自己还没有看)

    spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. spring-boot-starter-amqp 通过spring-rabbit来支持 ...

  6. Spring Boot Starter 开发指南

    Spring Boot Starter是什么? 依赖管理是任何复杂项目的关键部分.以手动的方式来实现依赖管理不太现实,你得花更多时间,同时你在项目的其他重要方面能付出的时间就会变得越少. Spring ...

  7. Spring boot starter pom的依赖关系说明

    Spring Boot 通过starter依赖为项目的依赖管理提供帮助.starter依赖起始就是特殊的maven依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖. sp ...

  8. (转)如何在maven的pom.xml中添加本地jar包

    1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下所示: 1 groupId 2 artifactId 3 version 4 jar包的依赖 如果要将 ...

  9. (转)如何在maven的pom.xml中添加本地jar包

    转载自: https://www.cnblogs.com/lixuwu/p/5855031.html 1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下 ...

随机推荐

  1. 【遍历二叉树】01二叉树的前序遍历【Binary Tree Preorder Traversal】

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,返回他的前序遍历的 ...

  2. 如果你的NavigationDrawer里面的Item没有响应,Drawer不能左滑关闭

    如果你的NavigationDrawer里面的Item没有响应,Drawer不能左滑关闭,应该是因为你没有把主要内容放在DrawerLayout标签下的第一位. The main content vi ...

  3. 制作SD卡img文件,并扩容

    /********************************************************************************** * raspi-config E ...

  4. buildroot mysql mysql.mk hacking

    /*********************************************************************** * buildroot mysql mysql.mk ...

  5. swiper轮播 swiper整屏轮播

    近期坐了几个移动端 整屏轮播的  效果 之前都是自己一个个写,之前听说过swiper插件,没有使用过,今天一尝试,果然,爽 使用方法示例 <div class="swiper-cont ...

  6. 用遗传算法解决TSP问题

    浅谈遗传算法:https://www.cnblogs.com/AKMer/p/9479890.html Description \(小m\)在踏上寻找\(小o\)的路程之后不小心碰到了大魔王\(fat ...

  7. Linux不停往外发包

    一台Linux这两天不停往外发包,造成外部无法访问. [root@ct-nat ~]# watch ifconfig-------------查看数据包新增情况 Every 2.0s: ifconfi ...

  8. centos7添加环境变量

    # vim /etc/profile在最后,添加:export PATH="/usr/local/webserver/mysql/bin:$PATH" #添加的路径保存,退出,然后 ...

  9. Poj 1659 Distance on Chessboard(国际象棋的走子规则)

    一.Description 国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间.如下图所示: 王.后.车.象的走子规则如下: 王:横.直.斜都可以走,但每步限走一格. 后:横.直.斜都可以走 ...

  10. SQL SERVER 中的*=和=*

    一.* =和= * 是在sql server2000中左连接,右连接的用法相当于left join 和right join,现在sql2005和2008默认是不支持的,可以设置兼容2000或2008 ...