亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

隆林| 保山市| 滦南县| 庆城县| 深泽县| 淮南市| 营山县| 紫阳县| 剑河县| 泰和县| 昂仁县| 闽清县| 麻栗坡县| 东兴市| 广昌县| 彩票| 汉川市| 马龙县| 朔州市| 汝阳县| 兴义市| 永宁县| 固安县| 浙江省| 京山县| 常宁市| 宜城市| 崇仁县| 湖州市| 天祝| 永春县| 奉新县| 常熟市| 霞浦县| 台中市| 泸西县| 赣州市| 阿拉善右旗| 彭阳县| 湘阴县| 湾仔区|