免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
SpringBoot事務(wù)注解詳解

  作者 | Kero小柯

來(lái)源 | cnblogs.com/kesimin/p/9546225.html


@Transactional

spring 事務(wù)注解

1.簡(jiǎn)單開(kāi)啟事務(wù)管理

@EnableTransactionManagement // 啟注解事務(wù)管理,等同于xml配置方式的 <tx:annotation-driven />

2.事務(wù)注解詳解

默認(rèn)遇到throw new RuntimeException(“…”);會(huì)回滾 
需要捕獲的throw new Exception(“…”);不會(huì)回滾

指定回滾

@Transactional(rollbackFor=Exception.class)
    public void methodName() {
       // 不會(huì)回滾
       throw new Exception('...');
    }

指定不回滾

@Transactional(noRollbackFor=Exception.class)
    public ItimDaoImpl getItemDaoImpl() {
        // 會(huì)回滾
        throw new RuntimeException('注釋');
    }

如果有事務(wù),那么加入事務(wù),沒(méi)有的話新建一個(gè)(不寫(xiě)的情況下)

@Transactional(propagation=Propagation.REQUIRED)

容器不為這個(gè)方法開(kāi)啟事務(wù)

@Transactional(propagation=Propagation.NOT_SUPPORTED)

readOnly=true只讀,不能更新,刪除

@Transactional (propagation = Propagation.REQUIRED,readOnly=true)

設(shè)置超時(shí)時(shí)間

@Transactional (propagation = Propagation.REQUIRED,timeout=30)

設(shè)置數(shù)據(jù)庫(kù)隔離級(jí)別

@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)

3.指定事務(wù)管理器

spring Boot 使用事務(wù)非常簡(jiǎn)單,首先使用注解 @EnableTransactionManagement 開(kāi)啟事務(wù)支持后,然后在訪問(wèn)數(shù)據(jù)庫(kù)的Service方法上添加注解 @Transactional 便可。

關(guān)于事務(wù)管理器,不管是JPA還是JDBC等都實(shí)現(xiàn)自接口 PlatformTransactionManager 如果你添加的是 spring-boot-starter-jdbc 依賴,框架會(huì)默認(rèn)注入 DataSourceTransactionManager 實(shí)例。如果你添加的是 spring-boot-starter-data-jpa 依賴,框架會(huì)默認(rèn)注入 JpaTransactionManager 實(shí)例。

你可以在啟動(dòng)類中添加如下方法,Debug測(cè)試,就能知道自動(dòng)注入的是 PlatformTransactionManager 接口的哪個(gè)實(shí)現(xiàn)類。

3.1 打印項(xiàng)目事務(wù)管理器

@EnableTransactionManagement // 啟注解事務(wù)管理,等同于xml配置方式的 <tx:annotation-driven />
@SpringBootApplication
public class ProfiledemoApplication {

    @Bean
    public Object testBean(PlatformTransactionManager platformTransactionManager){
        System.out.println('>>>>>>>>>>' + platformTransactionManager.getClass().getName());
        return new Object();
    }

    public static void main(String[] args) {
        SpringApplication.run(ProfiledemoApplication.class, args);
    }
}

這些SpringBoot為我們自動(dòng)做了,這些對(duì)我們并不透明,如果你項(xiàng)目做的比較大,添加的持久化依賴比較多,我們還是會(huì)選擇人為的指定使用哪個(gè)事務(wù)管理器。 
代碼如下:

3.2 指定事務(wù)管理器

@EnableTransactionManagement
@SpringBootApplication
public class ProfiledemoApplication {

    // 其中 dataSource 框架會(huì)自動(dòng)為我們注入
    @Bean
    public PlatformTransactionManager txManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public Object testBean(PlatformTransactionManager platformTransactionManager) {
        System.out.println('>>>>>>>>>>' + platformTransactionManager.getClass().getName());
        return new Object();
    }

    public static void main(String[] args) {
        SpringApplication.run(ProfiledemoApplication.class, args);
    }
}

在Spring容器中,我們手工注解@Bean 將被優(yōu)先加載,框架不會(huì)重新實(shí)例化其他的 PlatformTransactionManager 實(shí)現(xiàn)類。

然后在Service中,被 @Transactional 注解的方法,將支持事務(wù)。如果注解在類上,則整個(gè)類的所有方法都默認(rèn)支持事務(wù)。

對(duì)于同一個(gè)工程中存在多個(gè)事務(wù)管理器要怎么處理,請(qǐng)看下面的實(shí)例,具體說(shuō)明請(qǐng)看代碼中的注釋。

3.1 使用指定的事務(wù)管理器

@EnableTransactionManagement // 開(kāi)啟注解事務(wù)管理,等同于xml配置文件中的 <tx:annotation-driven />
@SpringBootApplication
public class ProfiledemoApplication implements TransactionManagementConfigurer {

    @Resource(name='txManager2')
    private PlatformTransactionManager txManager2;

    // 創(chuàng)建事務(wù)管理器1
    @Bean(name = 'txManager1')
    public PlatformTransactionManager txManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    // 創(chuàng)建事務(wù)管理器2
    @Bean(name = 'txManager2')
    public PlatformTransactionManager txManager2(EntityManagerFactory factory) {
        return new JpaTransactionManager(factory);
    }

    // 實(shí)現(xiàn)接口 TransactionManagementConfigurer 方法,其返回值代表在擁有多個(gè)事務(wù)管理器的情況下默認(rèn)使用的事務(wù)管理器
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return txManager2;
    }

    public static void main(String[] args) {
        SpringApplication.run(ProfiledemoApplication.class, args);
    }

}

@Component
public class DevSendMessage implements SendMessage {

    // 使用value具體指定使用哪個(gè)事務(wù)管理器
    @Transactional(value='txManager1')
    @Override
    public void send() {
        System.out.println('>>>>>>>>Dev Send()<<<<<<<<');
        send2();
    }

    // 在存在多個(gè)事務(wù)管理器的情況下,如果使用value具體指定
    // 則默認(rèn)使用方法 annotationDrivenTransactionManager() 返回的事務(wù)管理器
    @Transactional
    public void send2() {
        System.out.println('>>>>>>>>Dev Send2()<<<<<<<<');
    }

}

粉絲福利:108本java從入門(mén)到大神精選電子書(shū)領(lǐng)取

??????

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Spring jdbctemplate和事務(wù)管理器 全注解配置 不使用xml
Spring事務(wù)總結(jié)
spring 事務(wù)不起效
Java面試題:SpringBoot的事務(wù)管理
【從零開(kāi)始學(xué)Spring筆記】Spring的事務(wù)管理
在Spring中實(shí)現(xiàn)事務(wù)掛起
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服