1.Spring Boot Profile 多环境配置

我们在开发项目时,通常同一套程序会被发布到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、redis地 址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的 事。 对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要 打包的内容之后进行区分打包,而Spring Boot 就更简单了,打好包后,只需在不同的环境下启动时候指定读取的配置文件就可以了。

在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

application-dev.properties:开发环境

application-test.properties:测试环境

application-prod.properties:生产环境

至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile} 值。

如:spring.profiles.active=test就会加载application-test.properties配置文件内容

1.1创建工程并创建多个配置文件

1.2每个环境的properties 设置branch分支的值

application.properties 默认dev

#默认使用dev的配置
spring.profiles.active=dev

application-dev.properties 端口8080

server.port=8080
branch=dev

application-test.properties 端口8081

server.port=8081
branch=test

application-prod.properties 端口8082

server.port=8082
branch=prod 

1.3创建测试类的Controller

TestController.java

@RestController
@RequestMapping("/test")
public class HelloController {
@Value("${branch}")
private String branch;
@GetMapping("/branch")
public String test(){return "Spring Boot Current branch "+branch;
}
}

1.4 maven project clean install

打包成功

1.5 测试

进入到 jar同级执行 java -jar xxx.jar --spring.profiles.active=test

xxx:指的是你项目打包后jar包名称 --spring.profiles.active=test

启动制定执行哪个环境的properties

cd target

java -jar boot-lesson-4-0.0.1-SNAPSHOT.jar --spring.profiles.active=test

cd target

java -jar boot-lesson-4-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

2 .Spring Boot devtools热部署

2.1创建工程

2.2 添加依赖POM.XML

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>

2.3配置plugin

加入 pligin 且配置一个属性 fork 为 true

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork></configuration></plugin></plugins></build>

2.4开启IDEA自动编译

选择 File | Settings | Compiler 命令,然后勾选 Build project automatically 复选框,低版本的 IDEA 请勾选 make project automatically 复选框。

IDEA 设置运行程中,允许自动编译

操作: ctrl + shift + alt + /,选择Registry,勾选勾上 Compiler autoMake allow when app running

2.5 手动触发编译

打开 edit configurations

找到 Running Application Update Policies---->On Update action 选择 Update classes and resources

按一下左下角的 Run 栏目中的 Update xxx application 才会触发热切换。也可以用快捷键 ctrl+F10

2.6 测试

1.编写测试类Controller

/*** @ClassName: TestController* TODO:类文件简单描述* @Author: kiell* @UpdateUser: kiell* @Version: 0.0.1*/
@RestController
@RequestMapping("/test")
public class TestController {@GetMapping("/hello")public String hello(){return "Hello World!!!!!";}
}

2.修改返回内容后不重启再次访问

3. Spring Boot 单元测试 MockMvc

3.1为何使用MockMvc?

对模块进行集成测试时,希望能够通过输入 URL 对 接口进行测试,如果通过启动服务器,建立http client进行 测试,这样会使得测试变得麻烦,假如我们的项目启动速度慢、网络环境差,这样就会造成我们的测试效率底下而且由于网络的原因 出现一些不可描述bug。所以为了方便我们对接口的测试,我们引入了 MockMVC。 MockMvc 实现了对 Http 请求的模拟,能够直接 转换到 接口的调用,而且不依赖网络环境,还提供了一套验证的工具,这样我们就能直观的看到认证的结果,大大提高了我们的自测 效率。

3.2 使用

1.我们怎么使用MockMvc 呢?
1. MockMvcBuilder构造MockMvc的构造器
2. mockMvc调用perform,执行一个RequestBuilder请求,调用controller的业务处理逻辑
3. perform返回ResultActions,返回操作结果,通过ResultActions,提供了统一的验证方式
4. 使用StatusResultMatchers对请求结果进行验证
5. 使用ContentResultMatchers对请求返回的内容进行验证

2. MockMvcBuilder

MockMvc是spring测试下的一个非常好用的类,他们的初始化需要在setUp中进行。 MockMvcBuilder是用来构造MockMvc的构造器 MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,将会从该上下文获取相 应的控制器并得到相应的MockMvc

3.MockMvcRequestBuilders

从名字可以看出,RequestBuilder用来构建请求的,主要的api有:

MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根据 uri 模板和 uri 变量值得到一个GET请求方式 的RequestBuilder,如果在controller的方法中method选择的是RequestMethod.GET,那在 mockMvc 单元测试中对应就要使用 MockMvcRequestBuilders.get。后续的post、put、deleted、等请求方式以此类推。

4.ResultActions

调用MockMvc.perform(RequestBuilder requestBuilder)后将得到ResultActions,对ResultActions有以下三种处理:

1. ResultActions.andExpect:添加执行完成后的断言。添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;

2. ResultActions.andDo:添加一个结果处理器,比如此处使用.andDo(MockMvcResultHandlers.print())输出整个响应结果信 息,可以在调试的时候使用。

3. ResultActions.andReturn:表示执行完成后返回相应的结果

3.3 Demo

1.创建工程

2. 创建java Bean

/**
* @ClassName: UserInfo
* TODO:类文件简单描述
* @Author: kiell
* @UpdateUser: kiell
* @Version: 0.0.1
*/
public class UserInfo {private String userId;private String name;public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

3.创建接口

/*** @ClassName: MockMvcController* TODO:类文件简单描述* @Author: kiell* @UpdateUser: kiell* @Version: 0.0.1*/
@RestController
@RequestMapping("/test")
public class MockMvcController {@GetMapping("/user")public UserInfo getUser(@RequestParam(required = false) String name,@RequestParam(required = false) String userId){UserInfo userInfo=new UserInfo();userInfo.setName(name);userInfo.setUserId(userId);return userInfo;}@PostMapping("/user")public UserInfo getUser(@RequestBody UserInfo userInfo){return userInfo;}
}

4. 创建单元测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMockMvcApplicationTests {private MockMvc mockMvc;@Autowiredprivate WebApplicationContext context;@Beforepublic void setUp(){mockMvc= MockMvcBuilders.webAppContextSetup(context).build();}@Testpublic void contextLoads() {}@Testpublic void mockMvcGet()throws Exception{MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/test/user").contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8).param("name", "zhangsan").param("userId", "211")).andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.userId").value("985")).andExpect(jsonPath("$.name").value("zhangsan1")).andReturn();System.out.println(mvcResult.getResponse().getContentAsString());}@Testpublic void mockMvcPost()throws Exception{UserInfo userInfo=new UserInfo();userInfo.setUserId("985");userInfo.setName("lisi");ObjectMapper mapper=new ObjectMapper();ObjectWriter ow=mapper.writer().withDefaultPrettyPrinter();String json=ow.writeValueAsString(userInfo);MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/test/user").contentType(MediaType.APPLICATION_JSON_UTF8).content(json).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).andExpect(jsonPath("$.userId").value("985")).andExpect(jsonPath("$.name").value("lisi")).andReturn();System.out.println(mvcResult.getResponse().getContentAsString());}}

5.测试

Springboot一:多环境配置、热部署、单元测试 MockMvc相关推荐

  1. 微服务架构编码构建 环境配置 热部署配置

    下面有每一步详细步骤: 不懂的可以留言评论. 全部笔记 1.约定 > 配置 > 编码 2.IDEA新建project工作空间 2.1.微服务cloud整体聚合父工程Project 父工程步 ...

  2. SpringBoot 配置热部署

    SpringBoot 配置热部署 先来说一说热部署具体有什么样的神奇作用? 再我们平常编写一个web项目时,都知道如果修改html或者jsp这些前端页面,我们浏览器刷新,是可以实时更新的.但是如果修改 ...

  3. 学习第五篇:【SpringBoot-Labs】Spring Boot 调试环境、热部署入门、Lombok、MapStruct入门

    本周(8.21-8.27)将学习芋道 Spring Boot的以下文章: 8.21: 快速入门 8.22:Spring Boot 自动配置原理 .Jar 启动原理 8.23:调试环境. 热部署入门.消 ...

  4. Intellij IDEA 4种配置热部署的方法【转】【补】

    热加载 热加载可以使代码修改后无须重启服务器,就可以加载更改的代码.(其实分java和非java代码,本处可以让java代码立即生效且不重启服务) 第1种:修改服务器配置,使得IDEA窗口失去焦点时, ...

  5. ieda 热部署_Idea配置热部署的详细教程

    一.概念 热部署就是正在运行状态的应用,修改了他的源码之后,在不重新启动的情况下能够自动把增量内容编译并部署到服务器上,使得修改立即生效.热部署为了解决的问题有两个, 一是在开发的时候,修改代码后不需 ...

  6. Intellij IDEA 4种配置热部署的方法

    热加载 热加载可以使代码修改后无须重启服务器,就可以加载更改的代码.(其实分java和非java代码,本处可以让java代码立即生效且不重启服务) 第1种:修改服务器配置,使得IDEA窗口失去焦点时, ...

  7. eclipse里面配置热部署,tomcat配置

    tomcat热部署问题: 在开始上班之前,项目还很小.每个项目启动只要几秒钟,当时不觉得麻烦. 可是---------------------------------------------- 上班之 ...

  8. IDEA 配置热部署

    IDEA 配置热部署 引言 步骤1 步骤2 步骤3 IDEA 旧版本 IDEA 新版本 热部署的缺点 总结 引言 平时如果我们修改了自己项目的代码后,都要重新运行启动类,才能使新的项目生效,配置了热部 ...

  9. 用IDEA新建一个springboard项目配置热部署解决AutoWired注解报错

    1.新建Spring Boot项目 * 注意:项目名必须全部小写* 勾选一些需要的组建 我这里勾选了DevTools模块可以包含在任何项目中,它可以节省大量的时间. 和web模块还有链接数据库用的jd ...

  10. 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控

      导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...

最新文章

  1. 智能指针_auto_ptr2_学习笔记
  2. JavaScript精进篇
  3. linux 导入函数,共享库 – Linux ELF文件:如何获取属于导入函数的共享对象
  4. Surface Computing
  5. SpringBootController控制层接收参数的几种常用方式
  6. JS+CSS全力打造的一级横向滑动,二级竖向下拉综合菜单
  7. 翻译自 RedHat 文章:What is middleware? (什么是中间件?)
  8. Python使用UDP广播实现服务器自动发现
  9. notepad++查看16进制文件
  10. python基础教程3下载-Python基础教程第3版中国PDF电子书免费下载
  11. python网页抓取与按键精灵原理一样吗_独家 | 手把手教你用Python进行Web抓取(附代码)...
  12. 从命名风格等方面解读阿里巴巴 Java 代码规范
  13. windows server 2008r2下搭建***服务器
  14. 联想笔记本那些有手写功能_可以在屏幕上自由手写联想Android平板电脑的哪些软件?如何设置联想平板电脑的手写笔迹...
  15. 中介分析(二): 多重中介分析
  16. My Dad said
  17. 2021年全球及中国酒店行业发展现状及竞争格局分析,全球酒店行业景气度大幅回暖「图」
  18. HTML5实现手机QQ表情功能
  19. prcs6汉化补丁怎么替换_最新 | EndNote X9.2授权版+汉化
  20. 四百左右的蓝牙耳机有哪些?四百左右好用的蓝牙耳机推荐

热门文章

  1. 写一个函数,输入n,求斐波那契数列的第n项。
  2. java在屏幕上打印出乘法口诀,Java打印乘法口诀
  3. 一些开源库,提高开发效率
  4. C#中public 、private、protect的区别
  5. JAVA实现MD5带盐加密_MD5加盐加密
  6. WSL2连接调用USB设备
  7. python中cpca库用法详解(从文本中提取省市区)
  8. 用 Python 给女友做了个可能会被打死的七夕礼物
  9. python 练习洗牌
  10. Go基础语法学习总结