国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:48日期:2023-09-12 18:49:35

環境搭建導入

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()); }}

添加數據訪問層、業務層

@Repositorypublic 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); }}

@Servicepublic 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 方法

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

在配置類加上@EnableTransactionManagement

@Configuration@ComponentScan('com.spring.tx')@EnableTransactionManagementpublic 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聲明式事務實現過程解析

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

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

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

標簽: Spring
相關文章:
主站蜘蛛池模板: 日韩一区二区精品久久高清 | 一级一毛片a级毛片欧美 | 日韩精品在线观看免费 | 亚洲手机看片 | 国产亚洲精品91 | 在线视频观看免费视频18 | 亚洲精品久久99久久 | 国产成人精品久久一区二区小说 | 成年人免费观看的视频 | 在线中文字幕视频 | 久久久久久免费精品视频 | 亚洲免费小视频 | 久久精品成人一区二区三区 | 欧美日韩一本 | 毛片三级 | 国产成人综合日韩精品婷婷九月 | 九九视频精品全部免费播放 | 成人欧美一区二区三区黑人免费 | 亚洲精品国产综合久久一线 | 日韩国产中文字幕 | 欧美不卡在线视频 | 国产成人精品一区二区不卡 | 亚洲国产天堂久久九九九 | jk制服福利在线播放 | 国产午夜亚洲精品 | 国产日产精品_国产精品毛片 | 亚洲精品15p | 欧美一级在线免费观看 | 欧美精品一区二区在线观看播放 | 毛片96视频免费观看 | 加勒比色综合久久久久久久久 | 欧美大尺度免费一级特黄 | 成人免费的性色视频 | 欧美一级高清免费播放 | 午夜精品尤物福利视频在线 | 毛片在线免费观看网站 | 久久福利青草狠狠午夜 | 成人区视频 | 久久一日本道色综合久 | 黄色影视频 | 99久视频 |