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收集器


目录
相关文章
|
1天前
|
存储 JSON 前端开发
【Spring项目】表白墙,留言板项目的实现
本文主要介绍了表白墙项目的实现,包含前端和后端代码,以及测试
|
1天前
|
JSON 前端开发 Java
|
1天前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
9天前
|
XML JSON Java
Spring Boot 开发中常见的错误
本文总结了 Java 开发中常见的几个问题及其改进方法,包括:1. 过度使用 `@Component` 注解;2. `@ResponseBody` 注解的错误用法;3. `@Autowired` 的不当使用;4. `application.properties` 管理不善;5. 异常处理不当。每部分详细解释了错误情况和建议的改进方案,并提供了相应的代码示例。
39 11
|
13天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
74 13
|
2天前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
88 0
|
10天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
27 5
|
8天前
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
|
20天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
27天前
|
前端开发 JavaScript Java
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
39 1