有很多网友会时不时的问我,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. Python基础-内置函数总结

    内置函数 int('123') float() string() tuple() set() dict(name='zdd',age=18) type()#查看类型 len()#看长度,其实是元素的个 ...

  2. spring学习-1

    spring框架的组件结构图 IOC(Inversion of Control):反转控制,思想是反转资源获取方向,传统的资源查找方向是组件向容器发起请求资源查找,作为回应,容器适时的返回资源,IOC ...

  3. 7_DoubleBuffer 游戏编程中的双缓存模式

    ### double buffer 双缓存 简单说: 当一个缓存被读取的时候,往另一个缓存里写入, 如此交替 #### the pattern 有两个缓存实例,一个是 current buffer, ...

  4. Android中高效的显示图片之一 ——加载大图

    在网上看了不少文章,发现还是官方文档介绍最详细,把重要的东西简单摘要出来.详细可看官方文档地址 ( http://www.bangchui.org/read.php?tid=9 ) . 在应用中显示图 ...

  5. bzoj 2001: City 城市建设 cdq

    题目 PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁.Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费.Louis希望建造最少的道路使得国内所有 ...

  6. 安装DCOS,关于docker异常引发的调查

    入门DCOS,刚开始安装,碰到了一个异常: Bind for 0.0.0.0:9000 failed: port is already allocated. 调试这个问题花费了好长时间,因为无法通过n ...

  7. C语言中clock函数的使用

    #include<cstdio> #include<cstdlib> #include<ctime> using namespace std; int main() ...

  8. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

  9. netty支持的协议

    流经网络的数据总是具有相同的类型:字节.这些字节是如何流动的主要取决于我们所说的 网络传输--一个帮助我们抽象底层数据传输机制的概念.用户并不关心这些细节:他们只想确保他们的字节被可靠地发送和接收. ...

  10. SP:目录

    ylbtech-SP:目录 商谱开发框架 1.返回顶部 1. 1.WebUIWeChatUI MobileUI 2.Core-Model-Repository-Security -Service3.D ...