事务管理

  • 介绍&操作

    • 事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

    • 事务控制主要三步操作:开启事务提交事务/回滚事务

      • 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

          1. 引入阿里云OSS文件上传工具类(由官方示例代码改造)

          2. 上传文件接口开发

    • 参数配置化

      • 将一些需要灵活变化的参数,配置在配置文件中,然后通过@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;        
          }
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐