中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring注解 TX聲明式事務實現過程解析

發布時間:2020-09-05 21:04:22 來源:腳本之家 閱讀:164 作者:農夫三拳有點疼~ 欄目:編程語言

環境搭建導入

maven依賴

<!--spring提供的數據庫操作工具-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<!--c3p0 數據庫連接池-->
<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.5.5</version>
</dependency>
<!--mysql連接器-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.48</version>
</dependency>

配置數據庫相關信息

@Configuration
@ComponentScan("com.spring.tx")
public class TxConfig {
  /**
   * 配置數據源
   */
  @Bean
  public DataSource dataSource() throws PropertyVetoException {
    ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
    comboPooledDataSource.setUser("root");
    comboPooledDataSource.setPassword("root");
    comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
    comboPooledDataSource.setJdbcUrl("jdbc:mysql:///test");
    return comboPooledDataSource;
  }

  @Bean
  public JdbcTemplate jdbcTemplate() throws PropertyVetoException {
    //Spring對配置類做了特殊處理,多次調用給容器中加組件的方法,其實是從容器中找組件,并不會重新添加
    return new JdbcTemplate(dataSource());
  }
}

添加數據訪問層、業務層

@Repository
public class UserDao {
  @Autowired
  private JdbcTemplate jdbcTemplate;

  public void saveUser(String name, Integer age) {
    String sql = "insert into user(name, age) values(?, ?)";
    jdbcTemplate.update(sql, name, age);
  }
}
@Service
public class UserService {
  @Autowired
  private UserDao userDao;

  public void saveUser(){
    String name = "jack11";
    Integer age = 19;
    userDao.saveUser(name, age);
  }
}

添加測試類

public class TxTest {
  @Test
  public void test(){
    ApplicationContext context = new AnnotationConfigApplicationContext(TxConfig.class);
    UserService userService = (UserService) context.getBean("userService");
    userService.saveUser();
  }
}

事務問題

此時基本環境已經搭建好了,點擊運行,數據可以成功插入但是還沒有配置事務,沒有事務回滾會造成某些情況下數據出錯。在Spring注解中,可以在需要添加事務的方法或類上加@Transactional,并且開啟事務管理功能,即@EnableTransactionManagement,代碼如下:

修改UserService 的 saveUser 方法

@Transactional
public void saveUser(){
  String name = "jack11";
  Integer age = 19;
  userDao.saveUser(name, age);
  //模擬異常
  int i = 1 / 0;
}

在配置類加上@EnableTransactionManagement

@Configuration
@ComponentScan("com.spring.tx")
@EnableTransactionManagement
public class TxConfig {
	//省略數據源、jdbcTemplate的配置
}

再次運行測試方法,會發現報錯了,但不是我們模擬的異常報錯,控制臺提示找不到bean

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available

我們還需要注冊一個事務管理器來管理事務,PlatformTransactionManager有很多實現類,在Spring 中 JdbcTemplate、Mybatis應該使用 DataSourceTransactionManager

Spring注解 TX聲明式事務實現過程解析

在配置類中再注冊一個組件,運行,事務生效

/**
 * 注冊事務管理器
 */
@Bean
public PlatformTransactionManager platformTransactionManager() throws PropertyVetoException {
  return new DataSourceTransactionManager(dataSource());
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

班玛县| 浪卡子县| 中卫市| 铜川市| 锦州市| 古浪县| 古蔺县| 阿坝县| 嘉禾县| 马山县| 南乐县| 鲁山县| 平定县| 广南县| 会理县| 清徐县| 龙海市| 凤凰县| 中宁县| 平陆县| 句容市| 镇平县| 界首市| 溧水县| 大石桥市| 金山区| 互助| 四川省| 井冈山市| 敦煌市| 溧阳市| 兴义市| 蒙山县| 江永县| 肇源县| 屏东市| 嘉禾县| 东乡族自治县| 杭锦旗| 宜宾县| 温泉县|