pring事务管理(注解式声明事务管理)

ilqr算法原理推导及代码实践 ilqr算法原理详解 阅读详情
步骤一、在spring配置文件中引入<tx:>命名空间
<beans


 xmlns="http://www.springframework.org/schema/beans"


 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


 xmlns:tx="http://www.springframework.org/schema/tx"


 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd


 http://www.springframework.org/schema/tx


 http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">


步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持
   <!-- 事务管理器 -->
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">


 <property name="sessionFactory">


 <ref bean="sessionFactory"/>


 </property>
 </bean>


 <!-- 对标注@Transaction注解的Bean进行事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
步骤三、在接口或类的声明处 ,写一个@Transactional.
     要是只在接口上写, 接口的实现类就会继承下来、接口的实现类的具体方法,可以覆盖类声明处的设置
@Transactional //类级的注解、适用于类中所有的public的方法


@Transactional
public class TestPOAOImpl extends POAOBase implements TestPOAO
{   
    @Transactional(isolation = Isolation.READ_COMMITTED)
    public void test1()
    {
        String sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解赵云',30)";
        execute(sql);


        sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解张飞',26)";
        execute(sql);


        int a = 9 / 0; //异常


        sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解关羽',33)";
        execute(sql);
        System.out.println("走完了");
    }
//execute() 方法略...
}
  1、使用说明(狠重要)
  如果@Transactional 修饰Bean类,表明这些事务设置对整个Bean类起作用;如修饰的是Bean类的某个方法,表明这些事务设置支队该方法有效。
  使用@Transactional时,可以指定如下方法:
   a、isolation:用于指定事务的隔离级别。默认为底层事务的隔离级别。
   b、noRollbackFor:指定遇到指定异常时强制不回滚事务。
   c、noRollbackForClassName:指定遇到指定多个异常时强制不回滚事务。该属性可以指定多个异常类名。
   d、propagation:指定事务的传播属性。
   e、readOnly:指定事务是否只读。
   f、rollbackFor:指定遇到指定异常时强制回滚事务。
   g、rollbackForClassName:指定遇到指定多个异常时强制回滚事务。该属性可以指定多个异常类名。
   h、timeout:指定事务的超时时长。
 具体设置如下:
   事物超时设置:
@Transactional(timeout=30) //默认是30秒
   事务隔离级别:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)读取未提交数据(会出现脏读, 不可重复读) 基本不使用
@Transactional(isolation = Isolation.READ_COMMITTED)读取已提交数据(会出现不可重复读和幻读)@Transactional(isolation = Isolation.REPEATABLE_READ)可重复读(会出现幻读)@Transactional(isolation = Isolation.SERIALIZABLE)串行化
MYSQL: 默认为REPEATABLE_READ级别SQLSERVER: 默认为READ_COMMITTED
   事务传播属性:
@Transactional(propagation=Propagation.REQUIRED) //如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
@Transactional(propagation=Propagation.NOT_SUPPORTED) //容器不为这个方法开启事务
@Transactional(propagation=Propagation.REQUIRES_NEW) //不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.MANDATORY) //必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.NEVER) //必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS) //如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
@Transactional(propagation=Propagation.NESTED)
   遇到异常回滚:
@Transactional(rollbackFor=java.lang.Exception) //指定回滚,遇到异常
  遇到异常不回滚:
@Transactional(noRollbackFor=Exception.class)//指定不回滚,遇到运行期




注意的几点:
  
1 @Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.


2 、用 spring 事务管理器,由spring来负责数据库的打开,提交,回滚.默认遇到运行期例外(throw new RuntimeException("注释");)会回滚,即遇到不受检查(unchecked)的例外时回滚;而遇到需要捕获的例外(throw new Exception("注释");)不会回滚,即遇到受检查的例外(就是非运行时抛出的异常,编译器会检查到的异常叫受检查例外或说受检查异常)时,需我们指定方式来让事务回滚 :要想所有异常都回滚,要加上 @Transactional( rollbackFor={Exception.class,其它异常}) .如果让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
如下:
@Transactional(rollbackFor=Exception.class) //指定回滚,遇到异常Exception时回滚
public void methodName() {
throw new Exception("注释");


}
@Transactional(noRollbackFor=Exception.class)//指定不回滚,遇到运行期例外(throw new RuntimeException("注释");)会回滚
public ItimDaoImpl getItemDaoImpl() {
throw new RuntimeException("注释");
}




   关务事务的隔离级别的说明:
   数据库系统提供了四种事务隔离级别供用户选择。不同的隔离级别采用不同的锁类型来实现,在四种隔离级别中,Serializable的隔离级别最高,Read Uncommited的隔离级别最低。大多数据库默认的隔离级别为Read Commited,如SqlServer,当然也有少部分数据库默认的隔离级别为Repeatable Read ,如Mysql
  Read Uncommited:读未提交数据(会出现脏读,不可重复读和幻读)。
  Read Commited:读已提交数据(会出现不可重复读和幻读)
  Repeatable Read:可重复读(会出现幻读)
  Serializable:串行化


脏读:一个事务读取到另一事务未提交的更新新据。
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。换句话说就是,后续读取可以读到另一事务已提交的更新数据。相反,“可重复读”在同一事务中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据。
幻读:一个事务读取到另一事务已提交的insert数据。
    这些事务隔离级别可以去看spring源码 : org.springframework.transaction.annotation.Isolation
(用时,导入org.springframework.transaction.annotation.Isolation,再在Transactional括号里用如isolation = Isolation.DEFAULT)




   关于事务传播属性的说明:
REQUIRED: 业务方法需要在一个事务中运行,如果方法运行时,已处在一个事务中,那么就加入该事务,否则自己创建一个新的事务.这是spring默认的传播行为.
SUPPORTS:如果业务方法在某个事务范围内被调用,则方法成为该事务的一部分,如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行.
MANDATORY:只能在一个已存在事务中执行,业务方法不能发起自己的事务,如果业务方法在没有事务的环境下调用,就抛异常
REQUIRES_NEW:业务方法总是会为自己发起一个新的事务,如果方法已运行在一个事务中,则原有事务被挂起,新的事务被创建,直到方法结束,新事务才结束,原先的事务才会恢复执行.
NOT_SUPPORTED:声明方法需要事务,如果方法没有关联到一个事务,容器不会为它开启事务.如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行.
NEVER:声明方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器就抛异常.只有没关联到事务,才正常执行.
NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中.如果没有活动的事务,则按REQUIRED属性执行.它使用了一个单独的事务, 这个事务拥有多个可以回滚的保证点.内部事务回滚不会对外部事务造成影响, 它只对DataSourceTransactionManager 事务管理器起效.
   这些事务传播属性可以去看spring源码 : org.springframework.transaction.annotation.Propagation
(用时,导入org.springframework.transaction.annotation.Propagation,再在Transactional括号里用如propagation = Propagation.REQUIRED) 


  常用事务注释罗列:
@Transactional (propagation = Propagation.REQUIRED,readOnly=true) //readOnly=true只读,不能更新,删除
@Transactional (propagation = Propagation.REQUIRED,timeout=30)//设置超时时间
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)//设置数据库隔离级别
//事务传播属性
@Transactional(propagation=Propagation.REQUIRED) //如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
@Transactional(propagation=Propagation.NOT_SUPPORTED) //容器不为这个方法开启事务
@Transactional(propagation=Propagation.REQUIRES_NEW) //不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.MANDATORY) //必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.NEVER) //必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS) //如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.


@Transactional 的所有可选属性如下:


属性 类型 默认值 说明
propagation Propagation枚举 REQUIRED 事务传播属性 (下有说明)
isolation isolation枚举 DEFAULT 事务隔离级别 (另有说明)
readOnly boolean false 是否只读
timeout int -1 超时(秒)
rollbackFor Class[] {} 需要回滚的异常类
rollbackForClassName String[] {} 需要回滚的异常类名
noRollbackFor Class[] {} 不需要回滚的异常类
noRollbackForClassName String[] {} 不需要回滚的异常类名
什么是DHCP Snooping?如何配置DHCP Snooping? 功能描述防护类型防御伪造 DHCP 服务器、避免地址冲突、增强网络安全性使用场景企业园区网、校园网、大型局域网配合机制IP Source Guard、DAI、防止 ARP 欺骗部署难度⭐⭐(简单)“DHCP Snooping,是内网 DHCP 安全防护的第一道门神。” 🛡️。 阅读详情

相关推荐

车载以太网测试技术解析

在智能汽车与HiL测试领域,高效解析与模拟车载网络通信是开发验证的关键。ZD-Converter 2000以媒体/介质转换器、嗅探器、拦截器、仿真器四合一的颠覆性设计,成为工程师应对复杂车载以太网测试的瑞士军刀。它支持双路车载/标准以太网智能转换、实时通信嗅探、硬件级数据拦截及ECU通信模拟,更通过串口命令实现全参数远程配置,赋能自动化测试流程。本文将深度解析其核心功能与实战应用场景。

Triv2025的博客 1142

Spring事务管理(注解式声明事务管理)

步骤一、在spring配置文件中引入命名空间  xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:tx="http://www.springframework.org/schema/tx"  x

日积月累终会滴水穿石 865

黑科技已上线|Lazada数据分析软件,一键式搞定你的店铺!

工欲利其事,必先利其器。在lazada跨境电商的整个流程中,适当的使用一些工具,不仅能大大的简化工作流程,而且可以提高实施效率。Mengla专为lazada电商卖家行业精细化分析lazada数据分析软件都有哪些强大功能! 一、两大优势: 1.海量数据: 数据覆盖面积大;数据分析维度逛;精确算法抓取海量数据;亿万数据秒级响应多种数据来源; 2.技术成熟: 深耕SaaS大数据挖掘;提供一站式数据分析服务;拥有领先的采集技术和运算模型架构; 二、Lazada数据分析软件的功能: 1.各国站点一键分析: 马来西亚

Menglakeji的博客 1144

@Transactional 注解与synchronized的使用的一些实战问题

@Transactional注解与synchronized使用带来的一些问题 这几天在练习写一个小工程,遇到了一些问题,代码大致如下: @RequestMapping(value = "/downCodeFile",method = RequestMethod.POST) @Transactional public String downCode(HttpServletRe...

海棠花未眠的博客 1541

5090D显卡安装LLaMA-Factory避坑指南:PyTorch与CUDA版本兼容性问题解决

本文是针对5090D显卡安装LLaMA-Factory时遇到的PyTorch与CUDA版本兼容性问题的详细解决指南。文章深入剖析了因GPU架构代际差异导致的“no kernel image”报错根源,并提供了从环境诊断、安装匹配的PyTorch Nightly版本,到最终集成验证的完整路径,帮助用户确保LLaMA-Factory在5090D上稳定运行。

Apple的专栏 868

[Dify] HTTP 请求节点总是调不通?先把请求头、参数、变量和返回 JSON 拆开查

这篇文章围绕 Dify HTTP 请求节点调不通、接口能通但流程不稳定、返回 JSON 后续节点读不到等问题展开,从 Method、URL、Header、Body、变量映射和返回字段提取几个角度梳理排查顺序。适合正在把 Dify Workflow 接入企业微信、CRM、工单系统或内部接口的读者阅读,帮助你把接口调用从一次性跑通推进到可复用、可验证的业务流程。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 3944

java中实现事务的两种方式:编程式事务和声明式事务

涉及到与数据库交互就必须会用到事务,如果一个方法中需要用到事务的地方没有使用事务就会造成数据不一致的风险,进而导致比较严重的bug,比如扣款时,账户的余额已经进行了扣减但是相应的订单没有生成,这种涉及账目的问题如果不使用事务进行一致性控制后果会很严重。在项目开发中,事务又可以分为单体事务和分布式事务,对于分布式系统要实现事务会比较复杂,有时候需要引入第三方系统控制一致性;而传统的单体应用就比较容易实现事务,尤其是使用到spring框架开发项目事务使用会更容易。

dream_xin2013的专栏 4900

14、X射线图像处理与特征提取全解析

本文全面解析了X射线图像处理与特征提取的关键技术,涵盖图像预处理、滤波、边缘检测、分割与恢复等流程,并深入探讨了几何特征(如面积、周长、圆度、椭圆拟合)、强度特征(均值、方差、对比度)、傅里叶描述符、不变矩(Hu矩、Gupta矩)以及局部描述符(SIFT、SURF)和稀疏表示方法。同时介绍了特征选择的过滤法、包装法和嵌入法,并结合Matlab代码示例展示了各类特征的实际提取过程。文章最后总结了当前技术的应用现状,并展望了深度学习在X射线图像分析中的未来潜力。

pz89012345的博客 134

实战:spring项目中不推荐用自带的声明式事务@Transactional

以上的事务管理适合大多数情况下需要编程式管理事务的情况,使用哪种方式需要架构师和程序员根据业务类型选择。Spring还提供了TransactionalOperator 和 ReactiveTransactionManager的方式来实现编程式事务,参考文章[2]中有说明,有兴趣的可以去查看Spring的官方网站。

为无为,事无事,味无味。 1660

3.3 数据导入与导出方法

Simulink 提供了多种数据导入与导出方法,能够满足不同场景下的需求。无论是从 MATLAB 工作区或外部文件导入数据,还是将仿真结果导出到工作区或文件,这些功能都极大地增强了模型的灵活性和实用性。掌握这些方法后,用户可以更高效地完成复杂系统的建模与分析任务。

xiaoheshang_123的博客 318

潜望式长焦模组全解析:结构构造、光路设计与工程实战挑战

随着移动影像能力的不断进化,潜望式长焦模组成为旗舰手机实现 5x 甚至 10x 光学变焦的关键配置。相比传统横向堆叠镜组,潜望式结构通过反射棱镜实现纵向空间上的光路折叠,有效解决了模组厚度与变焦行程的矛盾问题。然而,高倍变焦模组不仅面临复杂的光学路径设计,还涉及反射损耗控制、防抖马达配合、模组热应力管控与 ISP 畸变校正等一系列工程难点。本文将结合主流机型的实战经验,深入解析潜望式长焦模组的结构构造与调试路径,为影像系统工程师提供完整的实战参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3138

为什么有的公司会禁用spring声明式事务

在之前我一直偏向于使用声明式事务,我一直觉得声明式事务比较好用。相比于编程式事务,使用声明式事务时只需要加上一个注解,spring就能够帮助我们完成所有的事务控制。反观编程式事务却需要我们自己去控制事务的提交和回滚,这种代码入侵的事务编程看起来也不是那么优雅。但是最近在和朋友聊天时发现他们公司缺禁止使用声明式事务?这是为什么呢?其实原因也很简单,虽然声明式事务方便好用,但是有一个致命的缺陷,就是一旦使用不当,很容易造成事务失效。

Code Writers 596

华为OD机试 - TLV格式(Python/JS/C/C++ 2025 C卷 100分)

两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。和需要匹配的n个tag对应的n行匹配结果,每一行由长度和偏移量组成。第二行:需要匹配的tag数量n(0 < n < 1000)后面N行:需要匹配n个tag值(十进制表示),递增排列。标签10(0A)存在,长度3,valueOffset=2。标签15(0F)长度4,valueOffset=2。标签14(0E)长度2,valueOffset=8。

学Java,找哪吒 2038

try catch后spring 事物不显式提交

spring管理的事物,例如声明式事物或者是注解式事物默认是在抛出运行异常时,会被spring catch到然后回滚,如果你在需要事物管理的方法里就已经try,catch了。哪么spring就捕获不到这个异常,也就不会回滚了。例如:public void doSome(){ try{ update ..... delete ..... }c

卡夫卡 853

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

spring管理hibernat的事务

在做spring对hibernate进行事务管理的时候遇到这样一个问题,使用hibernat的session.save()方法进行数据插入,始终需要说动commit才可以,耗费了我一个上午的时间,终于把问题找到了: 需要在spring-mvc.xml中增加如下配置:         class="org.springframework.aop.framework.autoproxy.D

孤鹰的博客 392

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

关于Spring注解式事务@Transactional的简单描述

一、背景: 目前很多项目的事务处理都是利用Spring的注解式事务实现的(@Transactional)。 在测试事务回滚的过程中发现如下现象: throw new RuntimeException("xxxxxxxxxxxx"); 事务回滚 throw new Exception("xxxxxxxxxxxx"); 事务没有回滚 二、关于spring事务使...

.... 永远年轻,永远热泪盈眶 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

spring事务管理之四:声明式事务管理:使用事务注解的方式

事务注解的方式,相对xml的方式来说,有优点,无需配置需要事务的业务方法的切点和事务属性。但是也有缺点,就是需要在每个需要事务的业务方法上加上一个注解@Transaction,否则事务不会生效。 这里沿用之前spring事务管理的代码: pom.xml依赖部分: &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&g...

feinifi的博客 454

Spring 使用注解方式进行事务管理

使用步骤:步骤一、在spring配置文件中引入命名空间<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:sc

532

spring transaction & mybatis-spring

spring transaction 1.概念 首先认识一下spring事务源码中主要类: PlatformTransactionManager: spring事务管理顶层接口.其中有获取事务, 提交事务和回滚等抽象操作. 我们使用的主要实现是DataSourceTransactionManager类, 数据源事务管理.需要配置数据源Datasource.我们常用的数据源也有druid,dbc...

Peanuts_D 485

mybatis-spring集成(详细介绍)

2):该配置除了具有上面提到的context:annotation-config/注解提到的作用,同时还具有自动将带有@Component, @Service, @Controller,@Repository等注解的对象注册到spring容器中的作用,如果同时使用了这两个配置则context:annotation-config/配置忽略,不会重复注册,对于使用注解式开发该配置必须有。

cz88888888666的博客 1389

SSM整合

导入pom 搭建spring环境 创建配置spring配置文件 测试 整合springmvc框架 编写springmvc配置文件 springmvc配置文件you核心控制器在tomcat启动的时候加载如图 但是spring的配置文件没有加载,这样就导致无法完成service中对象的创建,所以需要使spring配置文件也加载,以下是实现方法 配置spring的监听器 测试 编写mybat...

C_suixin的博客 202

Mybatis-spring集成

@Service用于标注业务层组件 @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即DAO组件 @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Aspect//切面 @Pointcut//定义需要切面的地方,表达式参数(https://blog.youkuaiyun.com/elim168/article/details/78150438) @annotation//当执行的方法上拥有指定的注解时生效。

Pursuit_li的博客 162

spring boot 遇到的注解:@Transactional

标红即为本文的关键词,以后回顾时候可以看标红字段进行串联 转自:https://www.cnblogs.com/yepei/p/4716112.html     事务管理目的:即使出现异常情况,也可以保证数据一致性。 事务管理的特点: 为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java P...

新一的技术笔记 1415

mybatis与spring集成

1.添加相关依赖 注:spring 5.0.1.RELEASE有冲突 1.1 添加spring相关依赖(5.0.2.RELEASE) spring-core spring-beans spring-context spring-orm spring-tx spring-aspects spring-web 1.2 添加mybatis相关依赖 mybatis核心:m...

ty0714的博客 133

Spring事务集成

构造参数注入 spring事务导包 spring-tx 在spring配置文件配置 事务管理器 并且注入数据连接池(去参照sqlsesion的dataSource) 添加tx头命名空间 开启注解式支持 加注解@Transaction 加了这个注解就开启了事务 增添删就加注解 查询不加 注解太多了,使用事务传播机制 在类上加上注解@Transactional(readonly=false,propagation=Propagation.NOT_SUPPORTED) readonly:只读(

银魄清辉自夜凝的博客 250

Spring的错误集

1.对于java bean 中需要一个Date类型的时候我们通常是先做一个日期工厂来提供类型转换,其本质类似于我们写了一个DateUtil,当我们需要日期转化的时候我们就把这个工厂拿过来用,这样就可以提供实时的日期转换,其实我们手写一个DateUtil也是可以的。具体解决方案见详情...

尐乙的博客 220
上一篇: Java中static 和final的区别
下一篇: spring切点切面aop——xml非注解
network_boy
博客等级 码龄12年 9粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值