Spring: 配置声明式事务


XML:

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
"http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
                           http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">

  
  base-package="io.oar"/>
  
  
  "dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    "driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    "url" value="jdbc:mysql://localhost:3306/java"/>
    "username" value="root"/>
    "password" value="coalesce"/>
  

  
  "jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    
    "dataSource" ref="dataSource"/>
  

  
  "dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    
    "dataSource" ref="dataSource"/>
  

  
  
  
  
  "transactionInterceptor" transaction-manager="dataSourceTransactionManager">
    
    
      "change" propagation="REQUIRED" read-only="false" isolation="REPEATABLE_READ"/>
      
    
  

  
  
    
    "pointcut" expression="execution(* io.oar.service.CooService.*())"/>
    
    ref="transactionInterceptor" pointcut-ref="pointcut"/>
  

配置类注解方式:

package io.oar.config;


import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

@Configuration  // 配置类
@ComponentScan(basePackages = "io.oar")  // 组件扫描
@EnableTransactionManagement  // 开启事务
public class Config {
  // 创建数据库连接池
  @Bean(value = {"aaa","bbb"})  // bean name: aaa, bbb
  public DruidDataSource getDruidDataSource(){
    DruidDataSource druidDataSource = new DruidDataSource();
    druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    druidDataSource.setUrl("jdbc:mysql://localhost:3306/java");
    druidDataSource.setUsername("root");
    druidDataSource.setPassword("coalesce");
    return druidDataSource;
  }

  @Bean
  public JdbcTemplate getJdbcTemplate(DataSource dataSource){  // 根据类型从IOC容器找到dataSource
    JdbcTemplate jdbcTemplate = new JdbcTemplate();
    // 注入DataSource
    jdbcTemplate.setDataSource(dataSource);
    return jdbcTemplate;
  }

  @Bean
  public DataSourceTransactionManager getDataSourceTransactionManager(DataSource dataSource){
    DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
    dataSourceTransactionManager.setDataSource(dataSource);
    return dataSourceTransactionManager;
  }
}