前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >springboot测试、打包、部署

springboot测试、打包、部署

作者头像
名山丶深处
发布于 2022-05-10 06:38:44
发布于 2022-05-10 06:38:44
1.8K00
代码可运行
举报
文章被收录于专栏:名山丶深处名山丶深处
运行总次数:0
代码可运行

本文使用《springboot集成mybatis(一)》项目,依次介绍springboot测试、打包、部署。

大多数朋友是做后端的,也就是为其他系统或者前端UI提供Rest API服务。

那么Rest API怎么测试?

1)通过前端页面或者直接组装URL,然后使用浏览器提交表单。

2)通过专业的API测试软件、工具。如:postman,Jmeter等。

3)通过开发语言编写测试脚本,模拟Http请求。如:HttpURLConnection、HttpClient等。

4)通过单元测试工具(Junit、JTest等)。

1、springboot单元测试

在《springboot集成mybatis(一)》项目中,我们已经通过Junit编写了Dao层的测试案例。

Web层咱们需要借助于MockMvc来模拟Http请求测试。

提示:若只想测试某一个方法,请选中方法名再执行(Junit默认执行所有Test案例)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderControllerTests {
    @Autowired
    private WebApplicationContext context;
    private MockMvc mvc;
    
    @Before
    public void init() throws Exception {
        //MockMvc注入spring容器,否则controller中注入的service、mapper均会报空指针
        mvc = MockMvcBuilders.webAppContextSetup(context).build();
    }
    
    //测试OrderController.add()方法
    @Test
    public void add() throws Exception {
        //模拟请求参数
        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        params.add("orderNo", String.valueOf(System.currentTimeMillis()));
        params.add("orderName", "订单名称");
        params.add("amount", "100");
        
        //通过MockMvc模拟post表单提交
        mvc.perform(post("/order/add").accept(MediaType.APPLICATION_JSON).params(params))
                .andExpect(status().isOk())
                .andDo(print())
                .andReturn();
    }
    
    //测试OrderController.queryAll()方法
    @Test
    public void queryAll() throws Exception {
        //通过MockMvc模拟post表单提交
        mvc.perform(post("/order/queryAll").accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk())
        .andDo(print())
        .andReturn();
    }
}

2、springboot打包(maven)

2.1)Eclipse打包

选中项目点击鼠标右键 -> Run As -> Maven install

2.2)maven控制台打包(《windows平台安装maven》)

切换至项目pom.xml目录,执行命令:mvn install

2.3)通过Maven install插件打包时,Maven默认会执行所有Test案例。

如何跳过(不执行)测试案例?

在pom.xml配置文件中增加属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<properties>
  <skipTests>true</skipTests>
</properties>

或者执行命令时增加skip参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn install -Dmaven.test.skip=true

2.4)指定Maven打包类型

修改pom.xml配置文件中packaging属性。

2.4.1)构建jar包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<packaging>jar</packaging>

2.4.2)构建war包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<packaging>war</packaging>

2.4.3)构建war时,我们排除tomcat相关jar包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

3.springboot部署

3.1)部署jar包

通过java -jar启动(该方式启动后,停止服务比较麻烦)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nohup java -jar spring-boot-mybatis-0.0.1-SNAPSHOT.jar &

改进,将当前jar注册为服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ln -s /部署目录/spring-boot-mybatis-0.0.1-SNAPSHOT.jar /etc/init.d/springbootmybatis

启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
service springbootmybatis start

3.2)部署war包

将构建好的war包放入tomcat/webapps目录下,并启动tomcat服务

3.3)如何重启?

3.3.1)tomcat部署的,进入tomcat安装目录/bin目录:

停止服务:./shutdown.sh

启动服务:./start.sh

3.3.2)jar包独立部署的:

停止服务:service springbootmybatis stop

启动服务:service springbootmybatis start

源代码:https://gitee.com/skychenjiajun/spring-boot

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
四则运算作业
代码: # -*- coding: utf-8 -*- import random from fractions import Fraction from envs.py3k.Lib.symbol import except_clause print ("小学四则运算测试:(结果保留1位有效数字)") ops = ['+', '-', '*', '/'] # 锟斤拷锟斤拷锟� ans = "" # 锟矫伙拷锟截达拷 num = 1 # 锟斤拷锟� rightnum = 0 t = 0 while
py3study
2020/01/17
4650
没钱没技术的草根,如何创业?
企鹅号小编
2017/12/27
7140
没钱没技术的草根,如何创业?
Python - 面向对象编程 - 小实战(2)
需求 小明和小美都爱跑步 小明体重 75 公斤 小美体重 45 公斤 每次跑步会减肥 0.5 公斤 每次吃东西体重增加 1 公斤 需求分析 小明、小美都是一个具体的对象,他们都是人,所以应该抽象成人类 小明、小美是具体的对象的姓名,而体重是另一个属性,所以有两个属性 跑步、吃东西都是一种行为,所以也有两个方法 类图 实现代码 class Person: # 构造方法 def __init__(self, name, weight): # 两个实例属性 se
小菠萝测试笔记
2021/09/07
5190
19岁创业少年的成功秘诀,坚持!
新生帝【希望自己能够在(新)的(生)活领域中称(帝),拥有一席之地!】 新生帝认为自己的团队还未准备好,不想过多宣传,因此,本文不提及他的公司和真实姓名,只说他的创业经历,希望给创业者学习和借鉴。 导语: 新生帝今年22岁,19岁大学毕业时,一个人租了学校附近的一间厕所大小的地下仓库开始创业。白天发传单,晚上进修编程,2个月后,才接到第一笔订单,给一家学校做网站。 创业2年半的时间中,他经历过没钱被房东扫地出门的艰辛,两次员工出走,只剩他一人的尴尬。现在,他带着一支90后团队,在广东中山为企业提供全平台服
BestSDK
2018/02/27
1.1K0
19岁创业少年的成功秘诀,坚持!
开发软件有多贵
 有个朋友的朋友想做一个公益的事。因为出资的都是教育水平较高的精英人士,所以对项目的监控透明度要求比较高。于是这个朋友的朋友就想了,信息时代嘛,IT 工具不是可以促进交流提升效率么?于是他对我说:我们
用户1289394
2018/02/28
1.2K0
开发软件有多贵
快递集体出海抢肉吃
7月5日,在马来西亚吉隆坡做小生意的徐女士收到了一批来自中国义乌的玩具产品,她感到非常惊喜:“从国内的供应商发货,到马来西亚这边的百世快递送货上门,只用了3天时间,而且这批10公斤的货,快递费只花了不到平时的三分之一,而且还是在疫情期间航班费用上涨的情况下。”
刘旷
2020/07/08
4180
你的电脑了为什么存在"锟斤拷"?
在计算机的世界里,文本处理是一项至关重要的任务。然而,我们常常会遇到一些令人头疼的问题,其中 “锟斤拷” 现象就是典型代表。它的出现不仅破坏了文本的可读性,还可能影响到整个数据处理流程的准确性。
炒香菇的书呆子
2024/11/19
2590
回锅肉
昨天第一次开原创评论留言,想不到这么多人捧场,本来想把各位的留言全部都放出来的,但是没想到,居然留言只能放出100条!所以,昨天没看见自己留言的朋友,大概知道自己的名次了~ 在前面的菜单中,
用户1907613
2018/07/20
4870
1 分钟带你认识从 "�" 到 "锟斤拷"
在前不久石头哥的这篇文章中 —— 你可能也会掉进这个简单的 String 的坑,讲述了因字符编码问题而连续踩坑的经历,文中有一个神奇的字符 “�”。
程序猿石头
2021/01/28
1.9K0
到底是C还是C++?关于数据/程序员的22则冷笑话
1、浙大软件学院,为了吸引更多的优秀人才报考,发布了一系列的宣传照,其中有一张引起了很多人的激烈争议。一些人说是C,另一些人非说是C++。。。 2、别人家的爸爸: 一位高考生的爸爸,通过#数据挖掘#和
CSDN技术头条
2018/02/09
1.1K0
到底是C还是C++?关于数据/程序员的22则冷笑话
海盗分赃难题
船上有十个海盗,有一天,他们抢到了一箱100斤的黄金,打算分赃(以斤为最小单位)。十个海盗从高到低分为10个等级,分配权在最高等级的海盗手里。他可以任意分配每个海盗的所得,但必须取得半数或半数以上的海盗(包括自己在内)的支持,否则他将被同伴处死。处死之后分配权将转移到下一个等级最高的海盗手里,当然,他也将面临同样艰难的选择。
java达人
2020/12/16
4840
海盗分赃难题
java8新特性lambda
Consumer(消费者) 消费者的Lambda表达式为(e)->{logger.info(e)}
用户9347382
2022/02/28
3710
编程到底难在哪里?
测试发现一个问题:如果水果店0和水果店1都有红富士苹果并且价格都低于10元/斤,而且水果店1的价格比水果店0更低,那么我希望买水果店1的苹果,但我设计的流程会让我买水果店0的苹果。
顶级程序员
2018/07/23
2320
神回答:编程到底难在哪里?
今天在浏览知乎的时候,看到了一个问题:编程到底难在哪里?看到一个非常有意思的回答,这个回答虽然并没有说到编程到底难在哪里的本质,但是却清清楚楚说明了程序员在编程的时候的思维逻辑和思考的整个过程。这个回答简直是通俗易懂,非常形象的表述了程序员在编程时需要考虑的复杂逻辑。
非著名程序员
2018/09/29
9390
神回答:编程到底难在哪里?
「Python」面向对象封装案例1——小夏爱跑步、案例扩展
封装是面向对象编程的一大特性,当我们面向对象编程的时候第一步就是先做需求分析然后根据明确的职责将不同的属性和方法封装到一个又一个抽象的类中。之所以说是抽象的类,因为在开发程序中类是不能直接使用的,当定义好一个类之后,在外界也就是类的代码外部来使用类创建对象,然后再让这个对象去调用我们封装在类中的各个方法。
python自学网
2022/09/03
2820
「Python」面向对象封装案例1——小夏爱跑步、案例扩展
计重转换(期末模拟)
Convert能够把输入的克数转成中国计重,例如1234克转成2斤4两6钱4克,并且把数值放入斤、两、钱、克四个属性中
叶茂林
2023/07/30
1520
Python技术巧妙破解Google计算题
开头先讲一下自己的亲身经历,05年的时候,也就是12年前,我去T公司面试,当时T公司在这个城市非常有名,有很多高手(号称小微软).我当时也是抱着初生牛犊不怕虎,想去会一会.在通过第一轮的笔试(当时考算法,程序,还有IQ)和初级面试后,进入第二轮,来了一个中国台湾技术经理,问了一些问题之后出了一道题,要求3分钟给出答案,这道题就是今天下面要讲的~~这3分钟我当时是又惊又囧,10多年过去了我现在依然记忆犹新(也许我以后会写一篇"10年了外企面试的那些往事") 今天先说正题,没有想到十多年后,我无意
企鹅号小编
2018/02/28
1.2K0
Python技术巧妙破解Google计算题
文科生带你学Python|分支VS循环
分支&循环是程序结构控制的核心,不管学习哪种编程语言,程序的结构控制都是非常重要的。
做数据的二号姬
2020/07/14
6160
逻辑测试题(161)答案
4个特点分到3个人身上,而且每个特点都刚好两人具备,而且每人最多三个特点,那么只能是:其中两人具备3个特点,另一人具备2个特点,即每人至少2个特点,最多3个特点。
用户5021203
2020/09/29
8290
逻辑测试题(161)答案
什么是客户终生价值(CLV)以及如何提升CLV?
客户终生价值(CLV)的概念不算难理解,就是客户在与我们发生关系的整个生命周期给企业带来的价值总和。如果还是有些似懂非懂的话那就用下面的例子来说明:
臭豆腐
2019/04/16
3.3K0
什么是客户终生价值(CLV)以及如何提升CLV?
相关推荐
四则运算作业
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验