1、打成Jar包后访问不到jar包外部的文件
由于项目涉及到了大量图片资源,即图片上传功能,总不能上传图片至Jar包内部吧,所以需要在jar包外设置资源路径来保存图片及其他资源。
对于其他框架我们一般使用war包部署到tomcat下,很方便就可以设置资源路径。
而SpringBoot项目自身集成tomcat,如果你真的向我一样作🧨,咱就想使用Jar包部署那就需要进行一些小小的配置。
其实也无非就是添加一个静态资源映射**addResourceHandlers,新建一个类继承自WebMvcConfigurer
需要注意的是:
Window上的路径以” \ “来分隔
Linux中是以” / **”来分隔的
所以对于项目中有路径配置的地方都需要更改!(如图片上传路径、图片获取的路径)
@Configuration
public class MallWebMvcConfigurer implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) {
// 这里通常配置项目的拦截器操作
}
/**
* 添加虚拟目录👇👇👇这里就是我们解决问题的重点了
* 静态资源映射
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//registry.addResourceHandler("/upload/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_PATH);
//registry.addResourceHandler("/goods-img/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_PATH);
//================上面是Window上的路径配置
//================下面是Linux上的路径配置
File path = null;
try {
path = new File(ResourceUtils.getURL("classpath:").getPath());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String gitPath = path.getParentFile().getParentFile().getParent() + File.separator + "myresource" + File.separator + "upload" + File.separator;
//上面gitpath其实是对文件路径做了一个拼接,File.separator根据系统自动获取路径是反斜杠还是正斜杠
//classpath:后面的路径就是你资源文件的绝对路径了,注意路径末尾也还有一个斜杠
registry.addResourceHandler("/upload/**").addResourceLocations(gitPath);
//上面等同于:registry.addResourceHandler("/upload/**").addResourceLocations("classpath:/home/shiers/project/jvshijimall/project/myresource/upload/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
}
然后记得在Linux中创建你的资源文件夹,将资源存进去就可以了
👇这是我的jar包和资源文件路径
最后将项目运行通过 你的域名/upload/xxxx.jpg 就可以远程访问文件中的图片了
2、端口开放
# 查看firewall服务状态
systemctl status firewalld
-----------------------------------------------------------------------------------------
# 开启、重启、关闭、firewalld.service服务
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
-----------------------------------------------------------------------------------------
# 查看防火墙规则
firewall-cmd --list-all # 查看全部信息
firewall-cmd --list-ports # 只看端口信息
-----------------------------------------------------------------------------------------
# 开启端口
# 开端口命令: 👈👈👈这里开启端口(防火墙在开启状态)
firewall-cmd --zone=public --add-port=8081/tcp --permanent
# 重启防火墙:(添加完端口要进行重启🌟🌟🌟别忘了重启)
systemctl restart firewalld.service
-----------------------------------------------------------------------------------------
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效👈👈👈👈👈👈👈👈👈👈注意👈
阿里云安全组设置(也需要在Linux中开启端口)
3、Jar包在Linux后台运行
在Window中我们开启jar包后可以将命令行窗口最小化,让其在后台运行,不影响我们其他操作。
Linux中使用 java -jar xxxx.jar 运行jar包后就不能再进行其他操作了,如果想让其像Window一样后台运行:
nohup java -jar xxxx.jar >temp.txt &
nohup :意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
>temp.txt :将command的输出重定向到temp.txt文件,即输出内容不打印到屏幕上,而是输出到temp.txt文件中。
& :在命令末尾加上 & 符号,就可以让程序在后台运行
后台运行以后,对于所有运行的程序,我们可以用 jobs –l 指令查看
看到后台运行的程序,我们可以使用 fg 编号 将对于程序调至前台
这样我们就将编号为1 的程序调至了前台
ctrl + z **:把该程序挂至后台,**该程序暂停
bg:将一个在后台暂停的程序,变成在后台继续执行。
那么在前台我们可以通过Ctrl+C结束程序,
在后台我们通过 kill **编号** 来结束。