【黑马JavaWeb+AI知识梳理】Web后端开发02 - 事务管理、文件上传
事务管理
-
介绍&操作
-
事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
-
事务控制主要三步操作:开启事务、提交事务/回滚事务
-
start transaction; / begin;
-
commit;(全部成功)
-
rollback;(只要有一项失败)
-
-
应用场景:
-
银行转账
-
下单扣减库存
-
-
-
Spring事务管理
-
@Transactional //事务管理 - 默认出现运行时异常,才会回滚,即RuntimeException
-
将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务
-
位置:业务(service)层的方法(推荐在会对数据库操作多次的方法)上、类上、接口上
-
-
事务进阶-rollbackFor
-
用于控制出现何种异常类型,回滚事务
-
-
事务进阶-propagation
-
事务传播行为:
-
指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制
-
-
Required:大部分场景
-
Requires_New:希望两个方法在独立的事务中运行,互不影响
-
-
四大特性(ACID)
-
原子性(Atomicity)
-
不可分割的最小单元,要么全部成功,要么全部失败
-
-
一致性(Consistency)
-
事务完成时,必须使所有的数据都保持一致状态
-
-
持久性(Isolation)
-
数据库系统提供的隔离机制,保证事务在不受 外部并发操作影响的独立环境下运行
-
-
隔离性(Durability)
-
事务一旦提交或回滚,它对数据库中数据的改变就是永久的
-
-
文件上传
-
简介
-
指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程
-
method必须为post
-
enctype必须为multipart/form-data,不然只会上传文件名
-
input type必须为file
-
-
本地存储
-
String originalFilename = file.getOriginalFilename(); // 获取原始文件名
-
file.transferTo(new File("D:/images/" + newFileName)); // 将文件转存到磁盘文件 -
spring: # 上传文件大小受限的解决方法 servlet: multipart: #最大单个文件大小 max-file-size: 10MB #最大请求大小 max-request-size: 100MB
-
-
阿里云OSS(Object Storage Service)
-
亚马逊、微软、谷歌、阿里云(国内最大的云服务提供商)
-
第三方服务
-
通用思路:准备工作、参照官方SDK(Software Development Kit,软件开发工具包,包括辅助软件开发的依赖(jar包)、代码示例等)编写入门程序、集成使用
-
-
使用步骤
-
注册阿里云(实名认证)- 充值 - 开通对象存储服务(OSS)- 创建bucket(存储空间是用户用于存储对象(Object,就是文件)的容器,所有的对象都必须隶属于某个存储空间。) - 获取并配置AccessKey
-
参照官方SDK编写入门程序
-
案例集成OSS
-
UploadController
-
-
引入阿里云OSS文件上传工具类(由官方示例代码改造)
-
上传文件接口开发
-
-
-
-
参数配置化
-
将一些需要灵活变化的参数,配置在配置文件中,然后通过@Value注解来注入外部配置的属性
aliyun: oss: endpoint: https://oss-cn-beijing.aliyuncs.com bucketNamce: java-ai region: cn-beijing@Component public class AliyunOSSOperator{ @Value("${aliyun.oss.endpoint}") private String endpoint; @Value("${aliyun.oss.bucketNamce}") private String bucketNamce; @Value("${aliyun.oss.region}") private String region; } -
问题:@Value注解注入配置文件的配置项时,如果配置项多,注入繁琐,不便于维护管理和复用
-
属性较多考虑复用时:
-
@ConfigurationProperties - 将多个项封装进一个实体类中
@Data @Component @ConfigurationProperties(prefix = "aliyun.oss") public class AliyunOSSProperties{ private String endpoint; private String bucketName; private String region; }
-
-
-
更多推荐
所有评论(0)