142
社区成员




这个作业属于哪个课程 | 2022年福大-软件工程、实践-W班 |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 | 个人技术总结————SpringBoot图片上传及jar包部署测试 |
其他参考文献 | CSDN博文,构建之法(邹欣 第三版) |
开学初制定的学习路线,并没有完成相应学习路线的学习,目前学习了JavaWeb,常用的开发框架SpringBoot,Mybatis-plus,以及SSM框架整合等,此外还学习了Liunx基础知识,对redis缓存有了初步了解。
在团队项目开发中主要负责后端接口的开发,我们组的技术栈包括SpringBoot,MyBatis-plus,Redis等。在开发过程中,也很好地对执行了代码规范,不再是先写代码再执行规范。同时也学会了SpringBoot图片上传接口的实现,自定义异常处理机制,以及jar部署Liunx服务器对图片上传进行测试。此外,还了解了一些SpringBoot开发规范,可以很好地进行开发。除了基本的层次以外,可以添加DTO层,用于封装sql语句返回的复杂内容,以及VO层,对前端请求参数进行封装。使用springboot自带的@validated注解,对前端参数进行校验,会更方便。同时也很好地锻炼了与队友的沟通能力。
实现图片上传接口,用户可以上传单张或者多张图片,对图片的大小,类型进行限制,指定存储服务器的位置,同时对图片上传异常进行自定义异常处理。同时搭建在liunx服务器上的jar包环境,部署jar包进行测试。
上传图片部分代码
图片上传过程中,用户可能会选择错误的图片上传,此时就应该抛出对应的异常并进行处理。所以我们要创建exception包下创建FileUploadException类,并继承自RuntimeException类。此外还要处理图片空异常,大小超出限制异常,图片类型异常,图片上传IO流异常,继承自FileUploadException。
图片上传异常类
然后在GlobalExceptionController的fileUploadexceptionHandler()的@ExceptionHandler注解中添加FileUploadException.class异常的处理;最后在方法中处理这些异常,并向前端返回异常信息。GlobalExceptionController的@ControllerAdvice注解进行全局增强处理。
指定参数MultipartFile对象,实现单文件上传,MultipartFile数组,可以实现多文件上传,与单文件上传不同的是,对MultipartFile数组进行for循环处理。
设置图片的类型,不属于avatatType中的图片类型,抛出异常,并通过全局异常处理,向前端返回异常信息。
设置图片上传大小,对超出大小的图片,抛出异常,并通过全局异常处理,向前端返回异常信息。
保存图片的后缀,使用uuid对文件名进行改写,保证文件名的唯一性,并将将其拼接。此外,对于上传文件为中文名时,在liunx系统上出现乱码,导致浏览器无法直接访问的现象出现,该方法可以避免这种情况的出现。
将图片存储位置设置为liunx服务器上的固定路径,服务器重启后,文件路径都不会改变,可以直接通过url访问,当然要添加路径映射。
使用MultipartFile对象的transferTo()实现文件上传,文件上传IO异常,抛出异常,并通过全局异常处理,向前端返回异常信息。
如果直接访问静态资源是访问不到的,需要进行路由映射。使用addResourceHandlers()方法添加路径映射。
部署服务器要从零开始,安装JDK,才能运行jar包。如果是SpringBoot项目的话,无需安装tomcat就可以运行,因为jar包自带tomcat。此外,还要安装mysql数据库,导入数据库资源(推荐使用navicat远程访问)。如果,使用到redis缓存处理,要安装redis数据库,并将redis挂在后台运行。服务器管理安全组开启相应的端口访问限制。将jar包部署到后台运行。
liunx中安装jdk有两种方式:一种是tar.gz安装,一种是rpm安装方式安装,个人更推荐tar.gz方式安装
xftp文件上传工具将文件上传,在Linux中的根目录下有一个 usr 共享目录,因为一些软件不仅 root要用,其他用户也要用,所以我们建议将软件安装在这个目录下,即 /usr目录下
tar -zxvf ***.tar.gz
cd /usr/jdk/bin/
执行./java -version
为了可以在任何地方使用java命令所以配置环境变量
修改系统的配置文件,设置环境变量并在其中追加上Path
vi /etc/profile
在profile后面最加
export JAVA_HOME=/usr/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile 加载配置生效
当然SpringBoot项目的jar包可以省略这一步。Tomcat是由java写的,所以我们在安装 Tomcat 之前必须安装JDK并配置环境变量
使用xftp连接服务器上传
使用liunx命令解压到指定目录下
tar -zxvf tomcat 或 tar -zxvf tomcat -C /user/
进入tomcat的bin目录,并执行startup.sh脚本
cd /usr/apache-tomcat-8.5.78/bin
执行./startup.sh
查看 Tomcat 是否启动成功
执行 jps
出现Bootstrap、Jps即启动成功
关闭防火墙,开启对应端口的访问限制
systemctl stop firewalld 关闭网络防火墙(暂时关闭,下次Linux重启时会自动开启防火墙)
systemctl disable firewalld 关闭开机自启动(永久关闭,注意,先执行第一句,再执行这一句)
进入tomcat的bin目录,并执行shutdown.sh脚本
cd /usr/apache-tomcat-8.5.78/bin
执行./shutdown.sh
进入Tomcat的conf目录修改server.xml配置文件其中的端口号
cd /usr/tomcat/conf/
执行vim server.xml
CentOS7 版本中MySQL数据库已从默认的程序列表中移除
rpm -qa | grep -i mysql
查询结果表明我安装的是5.7.38版本
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
如果执行过程中出现Unable to find a match: mysql-community-server,可以通过命令解决
yum module disable mysql
systemctl start mysqld.service
service mysqld status
mysql运行状态显示active即显示成功
grep 'password' /var/log/mysqld.log
红色部分即为密码
mysql -uroot -p
如果数据库无法访问,修改mysql配置文件my.cnf,新增skip-grant-tables
// 先关闭mysql服务
service mysqld stop
// 查找my.cnf所在目录
find / -name my.cnf
// 编辑my.cnf
vi my.cnf
// 插入
skip-grant-tables
// 重启服务器
service mysqld start
show databases;
use mysql;
// 设置密码
update user set authentication_string=password('passsword') where user='root';
修改配置文件my.cnf,删除skip-grant-tables,重启,再登录
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -zxvf redis-5.0.7.tar.gz
redis使用C语言开发的,要安装gcc编译器
make 输入make指令作为编译命令
make PREFIX=/usr/local/redis install
PREFIX= 这个关键字的作用是编译的时候用于指定程序存放的路径,指定存放路径也方便后续卸载,rm -rf redis存放目录
配置文件会存放在bin目录下,redis.conf 存放配置文件
// redis 作为前台进程
./bin/redis-server ./redis.conf
修改redis.conf配置文件,可以通过liunx常用命令编辑配置文件redis.conf,将daemonize no修改为daemonize yes,即可以后台运行
ps -aux | grep redis
systemctl stop firewalld 关闭网络防火墙(暂时关闭,下次Linux重启时会自动开启防火墙)
systemctl disable firewalld 关闭开机自启动(永久关闭,注意,先执行第一句,再执行这一句)
将jar包放到服务器的任意目录下,执行下面命令即可启动项目服务,可以通过jar包中指定的端口访问
// 这种方法,jar包会在后台运行,并输出日志到指定文件夹下
// 后台运行,nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
nohup java -jar test.jar >temp.txt &
- 查询端口对应的进程信息
netstat -alnp | grep portNumber
- 根据jar包的进程号pid,关闭进程
kill -9 pid
jar包部署到liunx服务器上,且设置文件的对外访问路径,但是图片依旧无法访问
本地无法访问远程数据库,navicat访问报错
// 查看防火墙是否已开放3306端口
firewall-cmd --query-port=3306/tcp
// 设置3306端口为永久开放
firewall-cmd --add-port=3306/tcp --permanent
// 查看firewalld状态,发现当前是dead状态,即防火墙未开启
systemctl status firewalld
// 关闭防火墙
systemctl stop firewalld
// 重启防火墙(设置了新的端口记得先关闭,再重启)
systemctl start firewalld
显示 host ip is not allowed to connect to this MYSQL server.
// 登录服务器mysql数据库,修改root下host值,任意远程ip都可以访问
update user set host='%' where user='root'
使用 yum -y install mysql-community-server 命令安装mysql,下载速度慢,有时候会安装失败
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
service mysql stop
rpm -qa | grep -i mysql
rpm -ev ***
find / -name mysql
rm -rf ***
rpm -qa | grep -i mysql
图片上传是在文件上传的基础上添加文件类型限制。通过全局异常处理可以对自定义的异常类型进行异常处理,并向用户返回相应的异常信息。对图片设置唯一的文件名,避免中文访问异常。此外在Liunx服务器上要设置图片上传的固定地址,这样在路径映射后可以直接通过url访问。
环境搭建过程中,JDK安装完成后,要注意设置全局变量,这样才能在liunx服务器的任意位置访问。tomcat安装后,要关闭liunx服务器防火墙,用户才可以外部访问tomcat。mysql安装完成后,要设置mysql中root的访问ip为%,关闭端口的防火墙,以及开启服务器端口安全组,这样就可以通过navicat直接访问。redis安装后,要修改配置文件,开启守护进程,这样才能后台运行。使用nohup后台部署jar包,