1. 程式人生 > 程式設計 >Spring中的事務管理如何配置

Spring中的事務管理如何配置

這篇文章主要介紹了spring中的事務管理如何配置,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在springboot中,使用事務非常的簡單,因為springboot已經幫我們配置好了,只需要加上註解@Transactional即可

在spring中我們需要做一些配置:主要有三點:

  • @Transactional:在相應的方法上加上這個註解
  • @EnableTransactionManagement:在配置類中加上,開啟事務管理
  • 需要在配置類中加入PlatformTransactionManager

PlatformTransactionManager介面定義了兩個方法commit和rollback

public interface PlatformTransactionManager {
  TransactionStatus getTransaction(TransactionDefinition var1) throws TransactionException;

  void commit(TransactionStatus var1) throws TransactionException;

  void rollback(TransactionStatus var1) throws TransactionException;
}

首先建立一個配置類:MainTxConfig

@EnableTransactionManagement //開啟事務管理
@ComponentScan("com.springTx") //掃描元件,這裡掃描UserDao和UserService
@Configuration
public class MainTxConfig {

  /**
   * 配置資料來源
   * @return
   * @throws Exception
   */
    @Bean
    public DataSource dataSorce() throws Exception {
      ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
      comboPooledDataSource.setUser("root");
      comboPooledDataSource.setPassword("123456");
      comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
      comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/study");
      return comboPooledDataSource;
    }

    /**
     * jdbc模板操作資料庫,這裡需要獲取到資料來源,dataSorce()是從容器中獲取已有的元件,而不是重新又建立一個數據源
     * @return
     * @throws Exception
     */
    @Bean
    public JdbcTemplate jdbcTemplate() throws Exception {
      return new JdbcTemplate(dataSorce());
    }

    @Bean
    public PlatformTransactionManager platformTransactionManager() throws Exception {
      return new DataSourceTransactionManager(dataSorce());
    }
}

UserService

@Service
public class UserService {

  @Autowired
  private UserDao userDao;

  @Transactional
  public void insertUser(){
    userDao.insert();
    int n = 1/0;
    System.out.println("插入成功");
  }
}

UserDao:

@Repository
public class UserDao {

  @Autowired
  private JdbcTemplate jdbcTemplate;

  public void insert(){
    String sql = "insert into user (name,age) value(?,?)";
    String name = UUID.randomUUID().toString().substring(1,7);
    jdbcTemplate.update(sql,name,20);
  }
}

測試:

public class Txtest {
  @Test
  public void test(){
    //建立容器
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainTxConfig.class);
    UserService userService = applicationContext.getBean(UserService.class);
    userService.insertUser();
    applicationContext.close();
  }
}

當出現異常時,事務會進行回滾操作。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。