在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小时内删除。
发表评论