SpringBoot接口项目部署 SpringBoot编写接口部署到服务器 CentOS服务器部署SpringBoot接口 SpringBoot接口部署 SpringBoot部署例子 Jar包部署

avatar
作者
猴君
阅读量:1

SpringBoot 项目 接口部署服务器

image.png
两种打包方式:jar包和War包。<br />下面编写一个接口访问数据库的例子:

image.png
image.png

1、先写Mybatis配置文件,与SpringBoot整合

# 配置Mybatis数据源 spring:   datasource:     url: jdbc:mysql://XXX.XXX.XXX.252:3306/数据库名称?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false     username: 用户名     password: 密码     driver-class-name: com.mysql.cj.jdbc.Driver 

2、开始编写实体层、控制层、数据访问层

2.1实体层(以一个表为例):

image.png

package com.tg.springbootprojectpack.Entity;  import java.util.Date; import java.io.Serializable;  /**  * (Appkm)实体类  *  * @author TGjava  */ public class Appkm implements Serializable {     private static final long serialVersionUID = 690888387321209032L;          private Integer id;     /**      * 归属用户      */     private Integer upid;     /**      * 应用ID      */     private Integer appid;     /**      * 卡密      */     private String kami;     /**      * 卡密类型      */     private String type;          private String note;     /**      * 卡密对应的值      */     private Integer amount;     /**      * 使用者      */     private String user;     /**      * 使用时间      */     private Long useTime;     /**      * 结束时间      */     private Long endTime;     /**      * 添加时间      */     private Date addtime;     /**      * 是否使用      */     private String kmUse;     /**      * 解绑次数      */     private Integer kmChange;     /**      * 单码卡密类型      */     private String kmTime;     /**      * 使用者IP      */     private String userIp;     /**      * 卡密解绑时间      */     private Long kmChangeTime;     /**      * 状态      */     private String state;       public Integer getId() {         return id;     }      public void setId(Integer id) {         this.id = id;     }      public Integer getUpid() {         return upid;     }      public void setUpid(Integer upid) {         this.upid = upid;     }      public Integer getAppid() {         return appid;     }      public void setAppid(Integer appid) {         this.appid = appid;     }      public String getKami() {         return kami;     }      public void setKami(String kami) {         this.kami = kami;     }      public String getType() {         return type;     }      public void setType(String type) {         this.type = type;     }      public String getNote() {         return note;     }      public void setNote(String note) {         this.note = note;     }      public Integer getAmount() {         return amount;     }      public void setAmount(Integer amount) {         this.amount = amount;     }      public String getUser() {         return user;     }      public void setUser(String user) {         this.user = user;     }      public Long getUseTime() {         return useTime;     }      public void setUseTime(Long useTime) {         this.useTime = useTime;     }      public Long getEndTime() {         return endTime;     }      public void setEndTime(Long endTime) {         this.endTime = endTime;     }      public Date getAddtime() {         return addtime;     }      public void setAddtime(Date addtime) {         this.addtime = addtime;     }      public String getKmUse() {         return kmUse;     }      public void setKmUse(String kmUse) {         this.kmUse = kmUse;     }      public Integer getKmChange() {         return kmChange;     }      public void setKmChange(Integer kmChange) {         this.kmChange = kmChange;     }      public String getKmTime() {         return kmTime;     }      public void setKmTime(String kmTime) {         this.kmTime = kmTime;     }      public String getUserIp() {         return userIp;     }      public void setUserIp(String userIp) {         this.userIp = userIp;     }      public Long getKmChangeTime() {         return kmChangeTime;     }      public void setKmChangeTime(Long kmChangeTime) {         this.kmChangeTime = kmChangeTime;     }      public String getState() {         return state;     }      public void setState(String state) {         this.state = state;     }      public YixiAppkm() {     }      public YixiAppkm(Integer id, Integer upid, Integer appid, String kami, String type, String note, Integer amount, String user, Long useTime, Long endTime, Date addtime, String kmUse, Integer kmChange, String kmTime, String userIp, Long kmChangeTime, String state) {         this.id = id;         this.upid = upid;         this.appid = appid;         this.kami = kami;         this.type = type;         this.note = note;         this.amount = amount;         this.user = user;         this.useTime = useTime;         this.endTime = endTime;         this.addtime = addtime;         this.kmUse = kmUse;         this.kmChange = kmChange;         this.kmTime = kmTime;         this.userIp = userIp;         this.kmChangeTime = kmChangeTime;         this.state = state;     }   }   

2.2控制层:

image.png

package com.tg.springbootprojectpack.Controller;  import com.tg.springbootprojectpack.Entity.YixiAppkm; import com.tg.springbootprojectpack.Mapper.AppkmMapper; import com.tg.springbootprojectpack.util.ApiResponse; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  import java.util.List;  @RestController @RequestMapping("km") public class AppkmController {      @Resource //依赖注入     private AppkmMapper appkmMapper;      @RequestMapping("getInfo")     public Object getAllInfo(){         try {             List<YixiAppkm> allKm = appkmMapper.getAllKm();             if (allKm != null){                 System.out.println("查询完毕");             }             return ApiResponse.success(allKm);         }catch (Exception e){             return ApiResponse.error(500,e.getMessage());         }     } }  //ApiResponse是一个api请求的处理类,把从数据库的数据拿出来整理成JSON格式 //搭配响应码,得到真实的接口数据 

2.3数据交互层:

目前例子为春注解开发,所以暂时不写mapper.xml配置文件
image.png

package com.tg.springbootprojectpack.Mapper;  import com.tg.springbootprojectpack.Entity.YixiAppkm; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;  import java.util.List;  @Mapper public interface AppkmMapper {     @Select("select * from appkm")     List<YixiAppkm> getAllKm(); }  

3、三层都写好以后,直接运行项目

查看控制台有无报错情况,正常如下:
image.png

3.1、直接去本地浏览器测试接口情况

http://localhost:1000/km/getInfo 

可以看到已经查询出数据了:
image.png

4、直接打包成jar包;

image.png
双击package
image.png
如图则打包成功去对应路径查看;
image.png

5、把jar包,放到服务器上,目录随意

image.png

6、检查服务器Java环境,我这边用的服务器是CentOS7

image.png
注意:这里的Java的版本要和你本地打包的Java版本一致;

7、使用Nohup命令来运行我们目录下的jar包

7.1nohup命令详解

nohup是“no hang up”的缩写,意味着不挂断运行。当使用nohup运行命令时,即使你退出登录或关闭终端,该命令仍然会在后台运行。nohup的基本用法是在命令前加上nohup并在命令后加上**&**符号,以使命令在后台运行。
命令格式如下:

nohup command > output.file 2>&1 &  举例:nohup java -jar SpringBootProjectPack-0.0.1-SNAPSHOT.jar > myapp.log 2>&1 & 

这里是它的各个部分的解释:

  • nohup: 命令,用于运行后续的命令并忽略挂断信号。
  • command: 你想要在后台运行的命令,例如java -jar your-app.jar
  • > output.file: 将标准输出(stdout)重定向到output.file文件中。这意味着程序的输出将>会被写入到这个文件,而不是显示在终端上。
  • 2>&1: 将标准错误(stderr)也重定向到同一个文件中。这样,无论是正常的输出还是错误信>息,都会被记录在同一个文件里。
  • &: 将命令放到后台执行。

image.png

8、使用tail 命令查看,jar包运行状态

8.1基本用法

  • 查看文件的最后10行:
tail filename 
  • 查看文件的最后N行:
tail -n N filename 

这里,**N**是你想要查看的行数。如果你想看更多或更少的行,只需将**N**替换为相应的数字。

8.2实时跟踪文件的更新

  • 使用**-f**选项来实时查看文件的新增内容:
tail -f filename 

这个命令非常适合跟踪日志文件的实时更新。当文件有新内容添加时,tail会自动显示这些新增的内容。

8.3查看多个文件

  • tail也可以用来同时查看多个文件的尾部内容:
tail -n N file1 file2 file3 

这会显示每个文件的最后N行。

8.4组合使用**-f-n**

  • 你可以组合使用**-f-n**选项,既实时跟踪文件更新,又控制显示的行数:
tail -f -n N filename 

这对于在文件更新频繁时只关注最近的几条记录特别有用。

8.5tail的其他选项

  • tail还有其他一些有用的选项,比如**–pid=PID**用于在指定的PID进程终止时停止跟踪文件,这在监控某个特定进程的日志输出时非常有用。

image.png

9、可以通过项目配置的SpringBoot Actuator来查看项目的健康情况

9.1访问查询出来的端口:http://主机名:1000/actuator

image.png

9.2访问查询出来的端口:http://主机名:1000/actuator/health

image.png
当Status为UP时,说明项目正常。

10、测试已经写好的接口

在这里插入图片描述

到此写好的项目就部署到自己的服务器上了,把接口整合到Web前端即可使用!!!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!