【SpringBoot】一文掌握程序的打包与运行

这篇具有很好参考价值的文章主要介绍了【SpringBoot】一文掌握程序的打包与运行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

前言

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

分析、剧透

本次是通过后端的测试,进行程序的打包和运行,并不牵扯到前端,但是可以基于postman进行测试
【SpringBoot】一文掌握程序的打包与运行

程序准备

数据库

一、建表:

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】一文掌握程序的打包与运行
【SpringBoot】一文掌握程序的打包与运行

环境搭建

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

【SpringBoot】一文掌握程序的打包与运行
【SpringBoot】一文掌握程序的打包与运行
1、添加IDEA没有提供选择的技术或者其他需要的技术

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

整体依赖坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.7.5</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.example</groupId>
   <artifactId>SpringBoot-development</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>SpringBoot-development</name>
   <description>SpringBoot-development</description>
   <properties>
       <java.version>1.8</java.version>
   </properties>
   <!--thymeleaf模板-->
   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-thymeleaf</artifactId>
       </dependency>
       <!--web启动-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <!--Mybatis整合Spring依赖-->
       <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>2.2.2</version>
       </dependency>
       <!--数据库依赖-->
       <dependency>
           <groupId>com.mysql</groupId>
           <artifactId>mysql-connector-j</artifactId>
           <scope>runtime</scope>
       </dependency>
       <!--Lombok依赖、简化实体类开发-->
       <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <optional>true</optional>
       </dependency>
       <!--测试类依赖-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>

       <!--Mybatisplus依赖-->
       <dependency>
           <groupId>com.baomidou</groupId>
           <artifactId>mybatisplus-spring-boot-starter</artifactId>
           <version>1.0.5</version>
       </dependency>
       <!-- 连接池依赖 -->
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid</artifactId>
           <version>1.2.8</version>
       </dependency>
       <!-- jsp依赖 -->
       <dependency>
           <groupId>javax.servlet.jsp</groupId>
           <artifactId>javax.servlet.jsp-api</artifactId>
           <version>2.2.1</version>
           <scope>provided</scope>
       </dependency>
       <!-- jstl标签库依赖 -->
       <dependency>
           <groupId>javax.servlet.jsp.jstl</groupId>
           <artifactId>jstl-api</artifactId>
           <version>1.2</version>
       </dependency>


   </dependencies>

   <!--打包插件、这里不要删除,这个项目的主要目的就是打包-->
   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
               <configuration>
                   <excludes>
                       <exclude>
                           <groupId>org.projectlombok</groupId>
                           <artifactId>lombok</artifactId>
                       </exclude>
                   </excludes>
               </configuration>
           </plugin>
       </plugins>
   </build>

</project>

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

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

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

  • 这里我们用yml语法,yml语法有很多好处,这里就不再赘述。
    【SpringBoot】一文掌握程序的打包与运行
完善三层架构基本框架
  • 三层架构:dao/mapper、service、controller。
  • 这里直接添加包即可,本不止于作为一个小结点。
    【SpringBoot】一文掌握程序的打包与运行
构建实体类
  • 实体类与数据库的字段要一一对应
  • 这里添加了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);
}


四、测试

  • 从底层往上开发,一个好处就是可以方便测试数据是否正确。
    【SpringBoot】一文掌握程序的打包与运行
开发业务层

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 {
    @Autowired
    private UserMapper userMapper;
    @Override
    public User selectByNameAndPwd(String name, String password) {
       return userMapper.selectByNameAndPwd(name,password);
    }

    @Override
    public int insertUser(User user) {
        return userMapper.insertByUser(user);
    }
}

测试:
【SpringBoot】一文掌握程序的打包与运行

开发控制层

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 {
    @Autowired
    UserService 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";
    }
}




测试:当账号密码存在,跳转成功页面
【SpringBoot】一文掌握程序的打包与运行

当密码不正确:跳转登录页面
【SpringBoot】一文掌握程序的打包与运行

程序打包和运行

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

【SpringBoot】一文掌握程序的打包与运行
注意以下输出:
【SpringBoot】一文掌握程序的打包与运行
【SpringBoot】一文掌握程序的打包与运行
看到BUILD SUCCESS说明我们已经打包成功了。
运行程序:
找到打包好的target目录,右键——>open in——>Explorer

【SpringBoot】一文掌握程序的打包与运行
进入到存储的项目target目录中:
【SpringBoot】一文掌握程序的打包与运行
在地址栏里输入cmd,敲入Java -jar s+tab键自动补全,运行项目
【SpringBoot】一文掌握程序的打包与运行
然后看下图:您猜怎么着?我们刚才的项目运行的时候已经把端口占用了,有没有解决办法?有
【SpringBoot】一文掌握程序的打包与运行

教你一招

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

二:杀死端口占用

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

举例:
【SpringBoot】一文掌握程序的打包与运行

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

结尾小结

我这里在调试debug的时候,出现了一些小问题,如下图所示:
【SpringBoot】一文掌握程序的打包与运行
问题: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
【SpringBoot】一文掌握程序的打包与运行
把上图中的1取消勾选即可,一般取消这个即可,如果还是不行就把1、2处都取消勾选,这样就万无一失了。
大家又掌握一个小方法。
【SpringBoot】一文掌握程序的打包与运行文章来源地址https://www.toymoban.com/news/detail-445916.html

到了这里,关于【SpringBoot】一文掌握程序的打包与运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [MapReduce程序编写运行打包 ]

    目录 🍀🍁前言: 🍀🍁编写MapReduce程序 🍀🍁代码中提交作业示意。 🍀🍁打包MapReduce程序 🍀🍁使用Eclipse打包MapReduce程序 🍀🍁使用Maven打包MapReduce程序 在pom.xml文件中,添加以下插件配置: 🍀🍁打包第三种方式: 🍀🍁部署MapReduce程序 🍀🍁可以使用hadoop fs命令或者Ha

    2024年02月11日
    浏览(41)
  • 【Java】关于Springboot项目打包后运行提示“没有项目主清单”的解决问题

    1.问题复现 若使用maven打包后,使用 java -jar packge-name-pro-0.0.1.jar 运行jar包出现如下提示: packge-name-pro-0.0.1.jar 中没有主清单属性 说明在项目 pom.xml 文件中配置有问题 2.解决方法 打开你的 pom.xml 文件,在 project 标签内,添加如下代码: 关键代码是:

    2024年02月03日
    浏览(63)
  • VS2019打包程序安装后无法运行

    C#实践 问题:做Winform项目,用VS2019打包程序,安装后无法运行。 现象1: 应用程序: xxxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止。 异常信息: System.FormatException 在 System.Number.StringToNumber(System.String, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalizat

    2024年02月04日
    浏览(42)
  • Unity+EasyAR 运行第一个程序以及打包

    Unity2020.1.0f1 + EasyARSenseUnityPlugin_4.5.0 1、首先,先要在EasyAR官网上注册一个账号,方便稍后创建许可秘钥 2、打开Unity,导入之前下载好的EasyARSense,详细操作可以查看我之前写的一篇文章(Unity导入EasyARSense) 导入EasyARSense之后,在项目左下角Project——Assets——Samples中,可以看

    2023年04月08日
    浏览(35)
  • 【前车之鉴】: 2023最新教程-将java程序打包到maven私服的正确打开方式,详细流程介绍不怕你掌握不了

    一是当前网络上一些博客有遗漏部分,这里做补充,二是网上思路没错,但是有些关键配置maven官方做了变更,其三:更详细,更面向初次使用的developer 上图所示的步骤基本就是本文的框架,其实打包逻辑比较清晰,仅仅是过程复杂,但有过公司开发经历的同学应该能get到这

    2024年02月11日
    浏览(41)
  • 使用Uniapp运行、打包、发布微信小程序

    1、HBuilder X 打开项目,运行到微信开发者工具,此时会唤起微信开发者工具 2、打包,运行------小程序-微信, 打包中  打包后的文件 3、打包完成后,在小程序开发工具中点击右上角------点击上传 点击上传   4、到小程序后台就可以看到了。测试需要设为体验版,然后测试后

    2024年02月16日
    浏览(53)
  • 在IDEA上运行成功,打包成jar包后,运行报错,程序自动退出

            java环境不正确,很有可能安装了多个环境,导致程序加载了错误程序。         尝试修改环境变量,如果不行,建议删除掉多余的java环境。          注意:删除掉多余的Java环境需要用程序删除,直接删除文件,容易删不干净。如下图,可以打开程序与功能删除

    2024年01月20日
    浏览(39)
  • SpringBoot项目(Tomcat启动https端口)——springboot配置Tomcat两个端口,https和http的方式 & jar的打包和运行

    1.springboot配置Tomcat两个端口,https和http的方式; 2.在https协议下,发送axios请求没反应,暂时用form表单解决; 3.运行jar包template might not exist报错及解决; 代码位置: https://gitcode.net/Pireley/springboot-tomcat-http-https 严格来说https不是一个独立协议,只是在http协议基础上增加了SSL/T

    2024年02月03日
    浏览(53)
  • 【Linux】使用Jenkins + svn + springboot自动构建jar包并自动打包在服务器上运行

    👨‍🎓 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入! 🐋 希望大家多多支持,我们一起进步!😄 🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏

    2024年04月26日
    浏览(37)
  • k8s除了可以直接运行docker镜像之外,还可以运行什么? springboot项目打包成的压缩包可以直接运行在docker容器中吗?

    Kubernetes(k8s)主要设计用于自动部署、扩展和管理容器化应用程序。虽然它与Docker容器最为密切相关,Kubernetes实际上是与容器运行时技术无关的,这意味着它不仅仅能够管理Docker容器。Kubernetes支持多种容器运行时,包括但不限于: Docker :最为人熟知的容器平台,Kubernetes最

    2024年02月21日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包