欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring中的事務(wù)管理如何配置

 更新時間:2019年11月20日 10:11:00   作者:聞窗  
這篇文章主要介紹了spring中的事務(wù)管理如何配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

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

在springboot中,使用事務(wù)非常的簡單,因為springboot已經(jīng)幫我們配置好了,只需要加上注解@Transactional即可

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

  • @Transactional:在相應(yīng)的方法上加上這個注解
  • @EnableTransactionManagement:在配置類中加上,開啟事務(wù)管理
  • 需要在配置類中加入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;
}

首先創(chuàng)建一個配置類:MainTxConfig

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

  /**
   * 配置數(shù)據(jù)源
   * @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模板操作數(shù)據(jù)庫,這里需要獲取到數(shù)據(jù)源,dataSorce()是從容器中獲取已有的組件,而不是重新又創(chuàng)建一個數(shù)據(jù)源
     * @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(){
    //創(chuàng)建容器
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainTxConfig.class);
    UserService userService = applicationContext.getBean(UserService.class);
    userService.insertUser();
    applicationContext.close();
  }
}

當出現(xiàn)異常時,事務(wù)會進行回滾操作。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論