spring boot2.0项目如何开发、调试、打包到最后的投产上线(一)

简介: 有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发、调试、打包到最后的投产上线。  

在pom包中添加spring-boot-starter-test包引用


有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发、调试、打包到最后的投产上线。

 

 开发阶段

 

 单元测试

 

 在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了。

 

 1、在pom包中添加spring-boot-starter-test包引用

 

org.springframework.boot
 spring-boot-starter-test
 test

  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需要添加以下的配置:

 

org.springframework.boot
 spring-boot-devtools
 true
 org.springframework.boot
 spring-boot-maven-plugin
 true

 

 添加以上配置后,项目就支持了热部署,非常方便集成测试。

 

 投产上线

 

 其实我觉得这个阶段,应该还是比较简单一般分为两种;一种是打包成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包

 

 将 jar  改为 war

 

 2、打包时排除tomcat.

 

org.springframework.boot
 spring-boot-starter-web
 org.springframework.boot
 spring-boot-starter-tomcat
 provided

 在这里将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收集器


目录
相关文章
|
10天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
25 4
|
10天前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
25 1
Spring MVC——项目创建和建立请求连接
|
10天前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
50 1
Maven——创建 Spring Boot项目
|
13天前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
15 1
如何使用 maven 创建一个 Spring Boot项目
|
4天前
|
XML Java 数据格式
提升效率!Spring Boot 开发中的常见失误轻松规避
本文深入探讨了在 Spring Boot 开发中常见的失误,包括不当使用注解、不良异常处理、低效日志记录等,提供了有效的规避策略,帮助开发者提升代码质量和系统性能,构建更健壮、高效的应用程序。
|
10天前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
13天前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
61 0
|
14天前
|
开发框架 Java API
「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
31 0
|
14天前
|
Java 应用服务中间件 Maven
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
170 0
|
14天前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
31 0