【SpringBoot】一文掌握程序的打包与运行
创始人
2024-04-06 14:41:40
0

文章目录

    • 前言
    • 分析、剧透
    • 程序准备
      • 数据库
      • 环境搭建
          • 创建SpringBoot项目、选择用到的依赖。
          • 完善三层架构基本框架
          • 构建实体类
          • 开发持久层
          • 开发业务层
          • 开发控制层
    • 程序打包和运行
          • 教你一招
    • 结尾小结

🌕博客x主页:己不由心王道长🌕!
🌎文章说明:SpringBoot关于程序的打包和运行🌎
✅系列专栏:spring
🌴本篇内容:基于Windows对程序进行打包和运行🌴
☕️每日一语:世上有很多不可能,不过不要在你未尽全力之前下结论。☕️
🕤作者详情:作者是一名双非大三在校生,喜欢Java,欢迎大家探讨学习,喜欢的话请给博主一个三连鼓励。🕤
🚩 交流社区:己不由心王道长(优质编程社区)

前言

我个人认为,学习一个知识点或者做一个项目,我们得有一个清晰的思路。知道自己要做什么。这个时候你就得把思路理清,而理清思路又不至于丢失的方法就是画出流程图。这里推荐一些好的软件,如:Xmind、processOn等都值得入手,上手快速。
本次讲解整体流程:
在这里插入图片描述

分析、剧透

本次是通过后端的测试,进行程序的打包和运行,并不牵扯到前端,但是可以基于postman进行测试
在这里插入图片描述

程序准备

数据库

一、建表:

create table user(
id int(2),
name varchar(15),
age int(3),
email varchar(30),
password varchar(20)
);

二、插入数据:

insert into user(id,name,age,email,password) values(1,"Jone",18,"test1@qq.com","775033");

三、验证
在这里插入图片描述
在这里插入图片描述

环境搭建

  • 环境搭建是从后端、从底层往上层开发的。就是先数据持久层、然后业务层、然后是控制层。
  • 整体流程图:
创建SpringBoot项目、选择用到的依赖。

在这里插入图片描述
在这里插入图片描述
1、添加IDEA没有提供选择的技术或者其他需要的技术

  • 我们在选择技术的时候,可能不会一下就完全想到用什么技术来实现我们的功能。而项目已经创建,删除再创建实属不聪明之举。
  • 所以我们需要在创建项目之后再对项目进行一次技术的整合,因为用的是SpringBoot,绝大部分开发用到的技术其实SpringBoot已经帮我们管理好了。
  • 这里就添加一些SpringBoot没有提供的

整体依赖坐标


4.0.0org.springframework.bootspring-boot-starter-parent2.7.5 com.exampleSpringBoot-development0.0.1-SNAPSHOTSpringBoot-developmentSpringBoot-development1.8org.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-starter-weborg.mybatis.spring.bootmybatis-spring-boot-starter2.2.2com.mysqlmysql-connector-jruntimeorg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtestcom.baomidoumybatisplus-spring-boot-starter1.0.5com.alibabadruid1.2.8javax.servlet.jspjavax.servlet.jsp-api2.2.1providedjavax.servlet.jsp.jstljstl-api1.2org.springframework.bootspring-boot-maven-pluginorg.projectlomboklombok

2、把Application启动类提到上一个目录

  • 这里为什么这么做是有原因的
  • SpringBootApplication类默认扫描本层包及其子包的文件,所以启动类必须在所有类的外面或者在同一层。
    这里启动类在三层架构的同级目录之中。

3、把application.properties文件改为application.yml

  • 这里我们用yml语法,yml语法有很多好处,这里就不再赘述。
    在这里插入图片描述
完善三层架构基本框架
  • 三层架构:dao/mapper、service、controller。
  • 这里直接添加包即可,本不止于作为一个小结点。
    在这里插入图片描述
构建实体类
  • 实体类与数据库的字段要一一对应
  • 这里添加了lombok依赖,我们可以看看lombok的强大之处。
package com.example.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author 不止于梦想* @date 2022/10/29 21:53*/@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private Integer id;private String Username;private Integer age;private String email;
}
开发持久层
  • 回想一下我们当时开发两天半时长项目时,持久层用到了两个方法,一个是验证用户名和密码是否存在。
  • 另一个是添加用户,一共两个方法。

一、开发接口

package com.example.mapper;import com.example.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;/*** @author 不止于梦想* @date 2022/11/11 14:34*/
@Mapper
public interface UserMapper {//通过用户名和密码查询User selectByNameAndPwd(@Param("username") String username,@Param("password") String password);//添加用户int insertByUser(@Param("user") User user);
}

四、测试

  • 从底层往上开发,一个好处就是可以方便测试数据是否正确。
    在这里插入图片描述
开发业务层

UserService:

package com.example.service;import com.example.pojo.User;/*** @author 不止于梦想* @date 2022/11/11 14:51*/
public interface UserService {User selectByNameAndPwd(String name, String password);int insertUser(User user);
}

ImplUserService:

package com.example.service.impl;import com.example.mapper.UserMapper;
import com.example.pojo.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author 不止于梦想* @date 2022/11/11 14:53*/
@Service
public class ImplUserService implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User selectByNameAndPwd(String name, String password) {return userMapper.selectByNameAndPwd(name,password);}@Overridepublic int insertUser(User user) {return userMapper.insertByUser(user);}
}

测试:
在这里插入图片描述

开发控制层

UserController:

package com.example.controller;import com.example.pojo.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;/*** @author 不止于梦想* @date 2022/11/11 15:12*/
@Controller
@RequestMapping("/user")
public class UserController {@AutowiredUserService userService;//登录成功跳转到登录页面@RequestMapping("/login")public void login(String name, String password) {ModelAndView mv = new ModelAndView();User user = userService.selectByNameAndPwd(name, password);if(user!=null){//如果用户存在,跳转到登录成功页面mv.setViewName("succeed");mv.addObject("user",user);System.out.println("登录成功");System.out.println(mv);}else {mv.setViewName("login");System.out.println("登录失败");System.out.println(mv);}}//注册成功跳转登录页面,注册失败留在注册页面@RequestMapping("/register")public void register(User user){//这里没有视图,所有设置为void//如果影响行数不等于0,则说明加入成功,返回登录页面int i = userService.insertUser(user);if(i!=0){//return "login";}//否则注册失败,留在注册界面//return "register";}
}

测试:当账号密码存在,跳转成功页面
![在这里插入图片描述](https://img-blog.csdnimg.cn/6220615c0a86421cae77c691abb0dd24.png

当密码不正确:跳转登录页面
在这里插入图片描述

程序打包和运行

第一,为什么我们需要打包?因为当我们把项目在我们的电脑上写好以后,需要发布项目供客户使用,不能你一写好,关机回家,客户也跟着下线。所以一般会把程序打包,然后在专门的服务器上运行。
程序打包:找到我们的项目的生命周期,先clean,然后执行package。

在这里插入图片描述
注意以下输出:
在这里插入图片描述
在这里插入图片描述
看到BUILD SUCCESS说明我们已经打包成功了。
运行程序:
找到打包好的target目录,右键——>open in——>Explorer

在这里插入图片描述
进入到存储的项目target目录中:
在这里插入图片描述
在地址栏里输入cmd,敲入Java -jar s+tab键自动补全,运行项目
在这里插入图片描述
然后看下图:您猜怎么着?我们刚才的项目运行的时候已经把端口占用了,有没有解决办法?有
在这里插入图片描述

教你一招

解决端口占用问题:
一、以临时端口号解决
在这里插入图片描述
java -jar 项目 --server.port=临时端口号
启动:可以看到启动是没问题的
在这里插入图片描述
而且端口已经变成了8085,我们在上面的时候设置的端口号是8081
在这里插入图片描述
可是设置临时端口号也有弊端,弊端就是很混乱,今天这个被占用,明天那个被占用。有没有一劳永逸的办法?没有,但是有一个你掌握了就能解决此类问题的办法。

二:杀死端口占用

#查询端口
netstat -ano
#查询指定端口
netstat -ano|findstr "端口号"
#根据进程PID查询进程名称
tasklist | findstr "进程PID号"
#根据PID杀死任务
taskkill /F /PID "进程PID号"
# 根据进程名称杀死任务
taskkill -f -t -im "进程名称"

举例:
在这里插入图片描述

小结:
在这里插入图片描述
还有一个需要注意的点就是,打包我们的项目,需要导入一个插件,不过这个插件在我们创建springboot项目之初就已经导入了。
在这里插入图片描述
另外还有一些常见的小问题,如打包之后多出来很多东西,还记得我们在上面打包过程中的test过程吗?不记得了?上去看看,我已经截图放在文章中了,在我们执行打包的时候,一般需要跳过这个test过程,以保证数据的准确性。
在这里插入图片描述
找到maven生命周期,选择test,点击闪电符号即可跳过测试。

结尾小结

我这里在调试debug的时候,出现了一些小问题,如下图所示:
在这里插入图片描述
问题:Skipped breakpoint at com.sun.proxy.$Proxy74.toString()+0 because it happened inside debugger evaluatio

翻译:跳过com.sun.proxy.$Proxy74.toString()+0处的断点,因为它发生在调试器评估中

看不懂,查看了资料说:IDEA的debugger是默认会在内部将方法执行一次,然后回显提示数据,本意是很好,但有时候会干扰影响结果。

解决方案:file——>settings——>build——>Debugger——>Data Views——>java
在这里插入图片描述
把上图中的1取消勾选即可,一般取消这个即可,如果还是不行就把1、2处都取消勾选,这样就万无一失了。
大家又掌握一个小方法。
在这里插入图片描述

相关内容

热门资讯

特朗普再掀风波,威胁起诉美联储... 美东时间周一,“懂王”特朗普再次将矛头指向美联储,公开表示正考虑以“严重失职”为由,对现任美联储主席...
*ST熊猫收到中国证监会立案告... 雷达财经雷助吧出品 文|简白 编|深海 12月29日,*ST熊猫发布《关于收到中国证券监督管理委员会...
以法治之力助推政务服务提质增效... 河南日报客户端记者 马涛 杨伟 河南日报社全媒体记者 刘霄 2026年1月1日,《许昌市政务服务条例...
诉讼证据系AI生成,触碰法律红... 文丨默 达 图丨张宇晴 近日,湖北一地法院审理案件时,发现原告提交的照片中赫然带有“豆包AI生成”...
安永参与浙江省境外投资法律合规... 12月26日,由浙江省商务厅主办、浙江省境外投资企业协会承办、浙企出海综合服务港协办的浙江省境外投资...
经济日报:财政政策明年如何更加... 中央经济工作会议部署,2026年我国继续实施更加积极的财政政策。扩大财政支出盘子、优化政府债券工具组...
皮海洲:监事会撤销了,独立董事... 皮海洲 | 立方大家谈专栏作者 随着时间向2026年靠近,有越来越多的上市公司公布了撤销公司监事会的...
45岁家长放学护岗时晕倒送医后... 极目新闻记者 刘琴 12月29日下午,张家界永定区天门小学一位家长在放学护岗时晕倒,送医后死亡,当地...
男子去世现配偶、亲生女、继子和... 再婚家庭的遗产继承问题,往往争执不下牵连众多,常常让亲情与法律纠缠不清,比普通家庭更加复杂。近日,宣...
天亿马中标:鹤壁市社会治安综合... 证券之星消息,根据天眼查APP-财产线索数据整理,根据中国共产党鹤壁市委政法委员会12月28日发布的...