首页 > 其他分享 >数据源dataSource以及事务tx的xml文件配置方式及代码配置方式

数据源dataSource以及事务tx的xml文件配置方式及代码配置方式

时间:2024-06-30 18:42:31浏览次数:1  
标签:xml 事务 jdbc tx 数据源 Transactional 回滚 dataSource mysql

所需要使用的依赖
<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(name = "jdbcTemplate")
    public JdbcTemplate getJdbcTemplate(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一样。】

标签:xml,事务,jdbc,tx,数据源,Transactional,回滚,dataSource,mysql
From: https://www.cnblogs.com/pyimc/p/18275744/SSM-tx

相关文章

  • 玄机——第五章 Windows 实战-evtx 文件分析 wp
    文章目录一、前言二、概览简化三、参考文章四、步骤(解析)步骤#11.将黑客成功登录系统所使用的IP地址作为Flag值提交;拓展1.1步骤#22.黑客成功登录系统后修改了登录用户的用户名,将修改后的用户名作为Flag值提交;拓展1.2拓展1.3步骤#33.黑客成功登录系统后成功访问了一个......
  • MybatisPlus逆向工程插件,无需编写任何配置文件,只需配置数据库信息,一键生成Entity、Con
    文章目录1.前言2.与其它逆向工程工具相比的优势3.下载插件4.准备工作4.1创建数据库和表(可跳过)4.2配置数据库信息4.2.1打开IDEA的菜单栏4.2.2找到工具,点击ConfigDatabase4.2.3填写连接数据库所需要的信息4.3导入MybatisPlus的Maven依赖和SpringWeb的Maven依......
  • Java串口框架jSerialComm替换rxtxcomm
    问题最开始使用的是rxtxcomm框架,部署时还要手动放驱动文件,而且后面没有进行维护,导致一些一些新系统不再支持,需要手动打包。<dependency><groupId>org.bidib.jbidib.org.qbang.rxtx</groupId><artifactId>rxtxcomm</artifactId><version>2.2</version><sc......
  • Mybatis XML文件中,对java.util.Date对象的值到转换为执行SQL进行比较所做的隐式行为分
    本次分析了mybatis的mapperXML文件,sql的where子句中使用java.util.Date进行比较进行分析。假设使用的是以下sql语句。select*fromxxxwherecreate_time>'2024-06-2020:38:38'在mybatis中,会将java.util.Date对象的值转为java.sql.Timestamp,之后在mybatis取值的时候,会调......
  • 利用diagrams渲染mermaid为xml文件
    一、背景        利用chatllama的方法进行数据增广,接入chatgpt4o得到大量创建图表的mermaid代码。投喂大模型第一步就是将mermaid代码渲染成xml,为后续再将xml渲染成jpg提供铺垫。mermaid介绍        Mermaid是一种基于JavaScript的开源图表生成工具,使用......
  • Android的Manifest.xml文件有什么用
     Android的Manifest.xml文件是一个重要的配置文件,用于描述应用程序的各种信息,包括应用程序的包名、版本号、应用程序的入口Activity、权限要求等等。它的作用如下:1.声明权限:Manifest文件可以声明应用程序需要使用的权限,例如访问网络、读写SD卡等。当用户安装应用程序时,系统会向......
  • RTX5全家桶源码综合模板发布,含FreeRTOS内核版本,将其打造成直接面向实际项目应用的综合
    【说明】1、RTX5全家桶的优势就是简单易用,初学的话,上手很快,稳定性也是杠杠的,且容易做稳定。2、同时RTX5也是有汽车级,工业级,医疗和铁路安全认证,只是安全级别比ThreadX要稍微低些。3、当前RTX5中间件源码已经开源了,大大方便大家问题的排查。同时提供了FreeRTOS内核版本,方便大家选......
  • testng.xml文件
    1)首先要声明一个suite的名字,用于描述将要运行的测试脚本集,可以根据自己需要任意命名,最终这个名字会在testng的测试报告中看到。<!DOCTYPEsuiteSYSTEM"http://testng.org/testng-1.0.dtd"><suitename="SuiteName"verbose="1"><testname="TestName">......
  • 汇编语言程序设计 - 将当前目录下文件 FIE10.TXT 的所有小写字母改为大写字母,然后拷贝
    80x86汇编题目题目描述:编写一个程序,将当前目录下文件FIE10.TXT 的所有小写字母改为大写字母,然后拷贝到当前目录文件FILE20.TXT。思路:1,分别打开两个文件,保存文件句柄2,读取FILE10文件的一个字节到BUF内存中。3,判断是否为小写。非小写字母直接写入到FILE20文件中,小写字母......
  • maven 加载不到 mybatis xml 配置文件
     <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin>......