在pom包中添加spring-boot-starter-test包引⽤
  有很多⽹友会时不时的问我,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, All().size());
  //验证结果集,提⽰
  Assert.assertTrue("错误,正确的返回值为200", status == 200);
  Assert.assertFalse("错误,正确的返回值为200", status != 200);
  引⼊了MockMvc⽀持了对Controller层的测试,简单⽰例如下:
  public class HelloControlerTests {
  private MockMvc mvc;
  //初始化执⾏
  public void setUp() throws Exception {
  mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
  }
  //验证controller是否正常响应并打印返回结果
  @Test
  public void getHello() throws Exception {
  mvc.("/hello").accept(MediaType.APPLICATION_JSON))
  .andExpect(MockMvcResultMatchers.status().isOk(www.027yeshenghuowang/))
  .andDo(MockMvcResultHandlers.print())
  .andReturn();
  }
  //验证controller是否正常响应并判断返回结果是否正确
  @Test
  public void testHello() throws Exception {
  mvc.("/hello").accept(MediaType.APPLICATION_JSON))
  .andExpect(status().isOk(xucaizxyl/))
  .andExpect(content().string(equalTo("Hello World")www.wbjyl/));
  }
  }
  单元测试是验证你代码第⼀道屏障,要养成每写⼀部分代码就进⾏单元测试的习惯,不要等到全部集成后再进⾏测试,集成后因为更关注整体运⾏效果,很容易遗漏掉代码底层的bug.
  集成测试
  整体开发完成之后进⼊集成测试,spring boot项⽬的启动⼊⼝在 Application类中,直接运⾏run⽅法就可以启动项⽬,但是在调试的过程中我们肯定需要不断的去调试代码,如果每修改⼀次代码就需要⼿动
重启⼀次服务就很⿇烦,spring boot⾮常贴⼼的给出了热部署的⽀持,很⽅便在web项⽬中调试使⽤。
  pom需要添加以下的配置:
  <dependencies>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools<www.yigouyule2/ /artifactId>
  <optional>true</optional>
  </dependency>
  </dependencies>spring怎么读取jar文件
  <build>
  <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 项⽬跟⽬录(和l同级)
  mvn clean package
  ## 或者执⾏下⾯的命令
  ## 排除测试代码后进⾏打包
  mvn clean package -st.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 -st.skip=true
  会在target⽬录下⽣成:项⽬名+版本号.war⽂件,拷贝到tomcat服务器中启动即可。
  gradle
  如果使⽤的是gradle,基本步奏⼀样,adle中添加war的⽀持,排除spring-boot-starter-tomcat:
  ...
  apply plugin: 'war'
  ...
  dependencies {
  compile("org.springframework.boot:spring-boot-starter-web:1.4.2.RELEASE"){
  }
  }
  ...
  再使⽤构建命令
  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:+UseFa
stUnorderedTimeStamps -XX:+UseParallelGC
  -XX:CICompilerCount :最⼤的并⾏编译数
  -XX:InitialHeapSize 和 -XX:MaxHeapSize :指定JVM的初始和最⼤堆内存⼤⼩
  -XX:MaxNewSize : JVM堆区域新⽣代内存的最⼤可分配⼤⼩
  ...
  -XX:+UseParallelGC :垃圾回收使⽤Parallel收集器

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。