所需要使用的依赖
<dependencies>
<!--spring jdbc Spring 持久化层支持jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.0.2</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.15</version>
</dependency>
</dependencies>

一、xml文件配置方式

1、连接到数据库创建jdbc.properties文件并配置以下信息

//(需要MySQL 8.0及以上版本)
jdbc.user=root
jdbc.password=root
jdbc.url=jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8&useSSL=false
jdbc.driver=com.mysql.cj.jdbc.Driver

2、创建xml文件

<!-- 导入外部属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 配置数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
</bean> <!-- 配置事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource">
</bean>
<!--
开启事务的注解驱动
通过注解@Transactional所标识的方法或标识的类中所有的方法,都会被事务管理器管理事务
-->
<tx:annotation-driven transaction-manager="transactionManager" /> <!-- 配置事务管理,此配置添加后不需要 <tx:annotation-driven/> 标签-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx: method name="get*" readonly="true"/> <!-- 设置需要添加事物的方法,并设置为仅能进行查找操作。 -->
<tx:method name="query*" read-only="true"/>
<tx:method name="find*" read-only="true"/> <!-- read-only属性:设置只读属性 -->
<!-- rollback-for属性:设置回滚的异常 -->
<!-- no-rollback-for属性:设置不回滚的异常 -->
<!-- isolation属性:设置事务的隔离级别 -->
<!-- timeout属性:设置事务的超时属性 -->
<!-- propagation属性:设置事务的传播行为 --> <tx:method name="save*" readonly="false"/ rollback-for="java.lang.Exception" propagation="REQUIRES_NEW"/> <!-- 此处也可使用自定义异常。mysql中REQUIRES_NEW为默认传播行为 -->
<tx:method name="update*" read-only="false" rollback-for="java.lang.Exception" propagation="REQUIRES_NEW"/>
<tx:method name="delete*" read-only="false" rollback-for="java.lang.Exception" propagation="REQUIRES_NEW"/>
</tx:attributes>
</tx:advice>
  • TODO: 基于xml实现的声明式事务(需要事务管理时)或添加aop时,需要引入aspectJ依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>6.0.2</version>
</dependency>
  • 在进行持久化操作方法上方加上@Transaction注解从而完成事务操作

二、全注解配置方式

  • 创建配置类
@Configuration
@EnableTransactionManagement
@EnableAspectJAutoProxy //开启aspect aop注解支持,通过@Transaction进行事务管理需要添加上
@ComponentScan("所扫描的包的路径")
class ServiceConfig{
@Bean
public DataSource dataSource(){
DataSource dataSource = new DataSource();
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8&useSSL=false");
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
} @Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
} //对数据库进行增、删、改、查、插的两种方式
//1、使用jdbcTemplate操作数据库
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource){
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
return jdbcTemplate;
}
}
    //2、使用Mybatis操作数据库配置

使用Mybatis操作数据库配置

拓展

三、@Transaction的用法,通过@Transactional中相关属性实现事务管理

1、回滚策略

  • 碰到某类异常进行回滚

    • rollbackFor属性:需要设置一个Class类型的对象
    • rollbackForClassName属性:需要设置一个字符串类型的全类名
  • 碰到某类异常不回滚
    • noRollbackFor属性:需要设置一个Class类型的对象
    • rollbackFor属性:需要设置一个字符串类型的全类名

使用方式

@Transactional(rollbackFor = ArithmeticException.class)
@Transactional(noRollbackForClassName = "java.lang.ArithmeticException")

2、隔离级别

使用方式

@Transactional(isolation = Isolation.DEFAULT)//使用数据库默认的隔离级别
@Transactional(isolation = Isolation.READ_UNCOMMITTED)//读未提交
@Transactional(isolation = Isolation.READ_COMMITTED)//读已提交
@Transactional(isolation = Isolation.REPEATABLE_READ)//可重复读
@Transactional(isolation = Isolation.SERIALIZABLE)//串行化

3、传播行为

  • REQUIRED:如果当前存在事务,则加入到当前事务中;如果不存在就新建一个(默认)【没有就新建,有就加入】
  • SUPPORTS:如果当前存在事务,则支持当前事务;如果当前没有事务,就以非事务方式执行【有就加入,没有就不管了】
  • MANDATORY:必须运行在一个事务中,如果当前没有事务正在发生,将抛出一个异常【有就加入,没有就抛异常】
  • REQUIRES_NEW:总是创建一个新的事务,并且在新事务中执行,如果当前存在事务,则把当前事务挂起;【不管有没有,直接开启一个新事务,开启的新事务和之前的事务不存在嵌套关系,之前事务被挂起】
  • NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务【不支持事务,存在就挂起】
  • NEVER:以非事务方式运行,如果有事务存在,抛出异常【不支持事务,存在就抛异常】
  • NESTED:如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于外层事务进行提交或回滚,但如果外部事务回滚,嵌套事务也会被回滚。如果外层事务不存在,行为就像REQUIRED一样。【有事务的话,就在这个事务里再嵌套一个完全独立的事务,嵌套的事务可以独立的提交和回滚。没有事务就和REQUIRED一样。】

数据源dataSource以及事务tx的xml文件配置方式及代码配置方式的更多相关文章

  1. 注解的形式与xml文件的形式完成事务管理及xml文件的配置

    需要的jar包: c3p0-0.9.2.1.jar com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1 ...

  2. 事务配置在applicationContext.xml文件中不起作用,控制不了异常回滚

    一.博主在学习到整合ssm框架的时候,遇到一个奇葩的问题就是将 事务的控制 ,写在在applicationContext.xml文件中不起作用,在事务控制的方法中,即使出现了异常,但是事务不会回滚的坑 ...

  3. web.xml文件的作用及基本配置

    Java的web工程中的web.xml文件有什么作用呢?它是每个web工程都必须的吗? 一个web中完全可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的. 那什么时候需要 ...

  4. 解析xml文件,修改Jenkins的配置

    最近因为服务器移动,在Jenkins中配置的一些地址之类的,都要改变,如图,我因为使用插件Sidebar Links增加一个链接地址,现在地址变了,所以在Jenkins中配置就需要改动link url ...

  5. Servlet的运行流程以及web.xml文件中的几种配置方式

    Servlet的运行流程: 有俩种方式: 1.创建一个包,然后在包下创建一个class,class里面需要继承httpservlet,复写service方法------>配置web.xml文件: ...

  6. Java发送邮件--web.xml配置,Java代码配置

    前言:我目前总结的使用java发送邮件的方式有两种,分别是在spring框架xml配置文件使用bean标签,另一种方法是把发送功能封装成一个对象,废话不多说上代码, 边看代码边讲解,希望对需要的人能有 ...

  7. 一个用 C# 实现操作 XML 文件的公共类代码

    using System; using System.IO; using System.Data; using System.Xml; using System.Xml.XPath; namespac ...

  8. ApplicationContext.xml文件详解

    想必用过Spring的程序员们都有这样的感觉,Spring把逻辑层封装的太完美了(个人感觉View层封装的不是很好).以至于有的初学者都不知道Spring配置文件的意思,就拿来用了.所以今天我给大家详 ...

  9. JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明

    1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...

  10. Mybaits整合Spring自动扫描 接口,Mybaits配置文件.xml文件和Dao实体类

    1.转自:https://blog.csdn.net/u013802160/article/details/51815077 <?xml version="1.0" enco ...

随机推荐

  1. 解决:Failed to get D-Bus connection: Operation not permitted

    docker中安装完httpd服务后,使用命令systemctl start httpd.service,发现报错,错误信息:Failed to get D-Bus connection: Opera ...

  2. 版本管理工具 nvm WIN版

    nvm -h //查看nvm的指令 nvm list //查看本地已经安装的node版本列表 nvm list available //查看可以安装的node版本 nvm install latest ...

  3. ansible api调用及二次封装详解

    ansible 2.7调用 程序 import json from collections import namedtuple from ansible.parsing.dataloader impo ...

  4. 痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink 7.62优化了手动增加新MCU型号支持方法. JLink 工具可以说是搞单片机开发的必备神器,JLink 包括一个硬件仿真器 ...

  5. layui 无限级多级菜单

    layui 二级菜单 :https://gitee.com/hslr/layui_extension_modulemenu 我更改了下,变成了无线级菜单 layui.define('element', ...

  6. sqlserver给某个用户授权某张表得操作权限,并利用这个用户进行跨库查询

    Sql表授权 创建用户 此时,改用户登录是看不到任何表的 设置权限         创建连接   EXEC sp_addlinkedserver 'LinkName','','SQLOLEDB','要 ...

  7. Swoole 源码分析之 Http Server 模块

    首发原文链接:Swoole 源码分析之 Http Server 模块 Swoole 源码分析之 Http Server 模块 Http 模块的注册初始化 这次我们分析的就是 Swoole 官网的这段代 ...

  8. 从Newtonsoft.Json迁移到 System.Text.Json不简单

    一.写在前面# System.Text.Json 是 .NET Core 3 及以上版本内置的 Json 序列化组件,刚推出的时候经常看到踩各种坑的吐槽,现在经过几个版本的迭代优化,提升了易用性,修复 ...

  9. 使用Docker快速安装Redis

    1.使用docker命令下一个redis的镜像 docker pull redis 2.创建 redis 的 data 目录和 conf 目录 1. cd /home/fengsir/redis 2. ...

  10. python安装OCR识别库

    (1)安装过程 参考的这个博客:https://blog.csdn.net/lanxianghua/article/details/100516187?depth_1-utm_source=distr ...