1、打成Jar包后访问不到jar包外部的文件

由于项目涉及到了大量图片资源,即图片上传功能,总不能上传图片至Jar包内部吧,所以需要在jar包外设置资源路径来保存图片及其他资源。
对于其他框架我们一般使用war包部署到tomcat下,很方便就可以设置资源路径。
而SpringBoot项目自身集成tomcat,如果你真的向我一样作🧨,咱就想使用Jar包部署那就需要进行一些小小的配置。
其实也无非就是添加一个静态资源映射**addResourceHandlers,新建一个类继承自WebMvcConfigurer
需要注意的是:
Window上的路径以”
\ “来分隔
Linux中是以”
/ **”来分隔的
所以对于项目中有路径配置的地方都需要更改!(如图片上传路径、图片获取的路径)

  1. @Configuration
  2. public class MallWebMvcConfigurer implements WebMvcConfigurer {
  3. public void addInterceptors(InterceptorRegistry registry) {
  4. // 这里通常配置项目的拦截器操作
  5. }
  6. /**
  7. * 添加虚拟目录👇👇👇这里就是我们解决问题的重点了
  8. * 静态资源映射
  9. * @param registry
  10. */
  11. @Override
  12. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  13. //registry.addResourceHandler("/upload/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_PATH);
  14. //registry.addResourceHandler("/goods-img/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_PATH);
  15. //================上面是Window上的路径配置
  16. //================下面是Linux上的路径配置
  17. File path = null;
  18. try {
  19. path = new File(ResourceUtils.getURL("classpath:").getPath());
  20. } catch (FileNotFoundException e) {
  21. e.printStackTrace();
  22. }
  23. String gitPath = path.getParentFile().getParentFile().getParent() + File.separator + "myresource" + File.separator + "upload" + File.separator;
  24. //上面gitpath其实是对文件路径做了一个拼接,File.separator根据系统自动获取路径是反斜杠还是正斜杠
  25. //classpath:后面的路径就是你资源文件的绝对路径了,注意路径末尾也还有一个斜杠
  26. registry.addResourceHandler("/upload/**").addResourceLocations(gitPath);
  27. //上面等同于:registry.addResourceHandler("/upload/**").addResourceLocations("classpath:/home/shiers/project/jvshijimall/project/myresource/upload/");
  28. WebMvcConfigurer.super.addResourceHandlers(registry);
  29. }
  30. }

然后记得在Linux中创建你的资源文件夹,将资源存进去就可以了
👇这是我的jar包和资源文件路径
image.png
最后将项目运行通过 你的域名/upload/xxxx.jpg 就可以远程访问文件中的图片了

2、端口开放

  1. # 查看firewall服务状态
  2. systemctl status firewalld
  3. -----------------------------------------------------------------------------------------
  4. # 开启、重启、关闭、firewalld.service服务
  5. # 开启
  6. service firewalld start
  7. # 重启
  8. service firewalld restart
  9. # 关闭
  10. service firewalld stop
  11. -----------------------------------------------------------------------------------------
  12. # 查看防火墙规则
  13. firewall-cmd --list-all # 查看全部信息
  14. firewall-cmd --list-ports # 只看端口信息
  15. -----------------------------------------------------------------------------------------
  16. # 开启端口
  17. # 开端口命令: 👈👈👈这里开启端口(防火墙在开启状态)
  18. firewall-cmd --zone=public --add-port=8081/tcp --permanent
  19. # 重启防火墙:(添加完端口要进行重启🌟🌟🌟别忘了重启)
  20. systemctl restart firewalld.service
  21. -----------------------------------------------------------------------------------------
  22. 命令含义:
  23. --zone #作用域
  24. --add-port=80/tcp #添加端口,格式为:端口/通讯协议
  25. --permanent #永久生效,没有此参数重启后失效👈👈👈👈👈👈👈👈👈👈注意👈

image.png
image.png
阿里云安全组设置(也需要在Linux中开启端口)
image.png

3、Jar包在Linux后台运行

在Window中我们开启jar包后可以将命令行窗口最小化,让其在后台运行,不影响我们其他操作。
Linux中使用 java -jar xxxx.jar 运行jar包后就不能再进行其他操作了,如果想让其像Window一样后台运行:

  1. nohup java -jar xxxx.jar >temp.txt &

nohup :意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
>temp.txt :将command的输出重定向到temp.txt文件,即输出内容不打印到屏幕上,而是输出到temp.txt文件中。
& :在命令末尾加上 & 符号,就可以让程序在后台运行

后台运行以后,对于所有运行的程序,我们可以用 jobs –l 指令查看
image.png
看到后台运行的程序,我们可以使用 fg 编号 将对于程序调至前台
image.png
这样我们就将编号为1 的程序调至了前台
ctrl + z **:把该程序挂至后台,**该程序暂停
image.png
bg:将一个在后台暂停的程序,变成在后台继续执行。
image.png
那么在前台我们可以通过Ctrl+C结束程序,
在后台我们通过 kill **编号** 来结束。