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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring注解 TX聲明式事務(wù)實(shí)現(xiàn)過(guò)程解析

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

環(huán)境搭建導(dǎo)入

maven依賴(lài)

<!--spring提供的數(shù)據(jù)庫(kù)操作工具--><dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.2.RELEASE</version></dependency><!--c3p0 數(shù)據(jù)庫(kù)連接池--><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>

配置數(shù)據(jù)庫(kù)相關(guān)信息

@Configuration@ComponentScan('com.spring.tx')public class TxConfig { /** * 配置數(shù)據(jù)源 */ @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對(duì)配置類(lèi)做了特殊處理,多次調(diào)用給容器中加組件的方法,其實(shí)是從容器中找組件,并不會(huì)重新添加 return new JdbcTemplate(dataSource()); }}

添加數(shù)據(jù)訪(fǎng)問(wèn)層、業(yè)務(wù)層

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

添加測(cè)試類(lèi)

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

事務(wù)問(wèn)題

此時(shí)基本環(huán)境已經(jīng)搭建好了,點(diǎn)擊運(yùn)行,數(shù)據(jù)可以成功插入但是還沒(méi)有配置事務(wù),沒(méi)有事務(wù)回滾會(huì)造成某些情況下數(shù)據(jù)出錯(cuò)。在Spring注解中,可以在需要添加事務(wù)的方法或類(lèi)上加@Transactional,并且開(kāi)啟事務(wù)管理功能,即@EnableTransactionManagement,代碼如下:

修改UserService 的 saveUser 方法

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

在配置類(lèi)加上@EnableTransactionManagement

@Configuration@ComponentScan('com.spring.tx')@EnableTransactionManagementpublic class TxConfig {//省略數(shù)據(jù)源、jdbcTemplate的配置}

再次運(yùn)行測(cè)試方法,會(huì)發(fā)現(xiàn)報(bào)錯(cuò)了,但不是我們模擬的異常報(bào)錯(cuò),控制臺(tái)提示找不到bean

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

我們還需要注冊(cè)一個(gè)事務(wù)管理器來(lái)管理事務(wù),PlatformTransactionManager有很多實(shí)現(xiàn)類(lèi),在Spring 中 JdbcTemplate、Mybatis應(yīng)該使用 DataSourceTransactionManager

Spring注解 TX聲明式事務(wù)實(shí)現(xiàn)過(guò)程解析

在配置類(lèi)中再注冊(cè)一個(gè)組件,運(yùn)行,事務(wù)生效

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 国产高清免费影视在线观看 | 欧美很黄视频在线观看 | 在线成人免费 | 又黄又湿又爽吸乳视频 | 花蝴蝶在线| 在线欧美一级毛片免费观看 | 九九九热在线精品免费全部 | 成人国产在线视频在线观看 | 久久福利青草精品资源站免费 | 成年男女免费视频网站播放 | 中文字幕精品在线 | 农村三级孕妇视频在线 | 韩国一级特黄清高免费大片 | 日本wwxx色视频 | 亚洲成a人片在线播放 | 99在线小视频 | 毛片三级 | 午夜精品久视频在线观看 | 欧美日韩色 | 99精品一区二区三区 | 一级做a爰在线就看 | 免费看孕妇毛片全部播放 | 真实的国产乱xxxx | 在线a人片免费观看国产 | 久草网在线观看 | 久久精品成人一区二区三区 | 国产日本欧美在线观看 | 亚洲天堂2018av | 国产精品亚洲一区二区三区 | 中文精品99久久国产 | 亚洲欧洲久久久精品 | 久久国产精品女 | 久久国产片 | 国产成人精品一区二区秒拍 | 老司机深夜影院入口aaaa | 一级毛片在播放免费 | 美女黄页在线观看 | 2022国产精品手机在线观看 | 欧美a级毛片免费播敢 | 日韩国产成人精品视频人 | 亚洲人成网站色7799在线观看 |