国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring數(shù)據(jù)庫事務(wù)處理

這篇具有很好參考價(jià)值的文章主要介紹了Spring數(shù)據(jù)庫事務(wù)處理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

數(shù)據(jù)庫事務(wù)的基本知識(shí)

ACID

Spring數(shù)據(jù)庫事務(wù)處理

兩類丟失更新

事務(wù)回滾丟失更新:

Spring數(shù)據(jù)庫事務(wù)處理
目前大部分?jǐn)?shù)據(jù)庫已經(jīng)通過鎖的機(jī)制來避免了事務(wù)回滾丟失更新。
數(shù)據(jù)庫鎖的機(jī)制:
鎖可以分為樂觀鎖和悲觀鎖,而悲觀鎖又分為:讀鎖(共享鎖)和寫鎖(排它鎖),而數(shù)據(jù)庫實(shí)現(xiàn)了悲觀鎖中的讀鎖和寫鎖,而樂觀鎖則需要開發(fā)人員自己實(shí)現(xiàn)。

數(shù)據(jù)庫在設(shè)計(jì)這兩種鎖的時(shí)候,這兩種鎖間的關(guān)系如下:讀鎖與讀鎖可以共存,讀鎖與寫鎖互斥,寫鎖與寫鎖互斥。

比如說,當(dāng)a操作某條數(shù)據(jù)時(shí),數(shù)據(jù)庫就會(huì)給這條數(shù)據(jù)加鎖,其他人只能查看這條數(shù)據(jù),但是卻不能操作,只有當(dāng)a事務(wù)提交結(jié)束以后,鎖被取消了,其他人才可以修改這條數(shù)據(jù)。

事務(wù)提交丟失更新

Spring數(shù)據(jù)庫事務(wù)處理
這是高并發(fā)編程中需要重點(diǎn)關(guān)注的問題,數(shù)據(jù)庫為了壓制此類丟失更新,提出了事務(wù)之間的隔離級(jí)別的概念。

數(shù)據(jù)庫事務(wù)的隔離級(jí)別

未提交讀

允許一個(gè)事務(wù)讀取到另一個(gè)事務(wù)沒有提交的數(shù)據(jù)。
這種隔離級(jí)別可以擁有很好的并發(fā)能力,但是對(duì)于數(shù)據(jù)的一致性無法保證,所以適用于追求高并發(fā)性,但是對(duì)數(shù)據(jù)一致性要求低的場(chǎng)景。
另外,未提交讀的隔離級(jí)別會(huì)造成臟讀的現(xiàn)象:
Spring數(shù)據(jù)庫事務(wù)處理

讀寫提交

一個(gè)事務(wù)只能讀取另一個(gè)事務(wù)已經(jīng)提交的數(shù)據(jù),而不能讀取未提交的數(shù)據(jù)。
這種隔離級(jí)別可以避免臟讀的發(fā)生。
Spring數(shù)據(jù)庫事務(wù)處理
雖然讀寫提交的隔離級(jí)別克服了臟讀的發(fā)生,但是又會(huì)出現(xiàn)不可重復(fù)讀的現(xiàn)象:
Spring數(shù)據(jù)庫事務(wù)處理

可重復(fù)讀

可重復(fù)讀的隔離級(jí)別是為了克服不可重復(fù)讀的問題:
Spring數(shù)據(jù)庫事務(wù)處理
可重復(fù)讀的隔離級(jí)別雖然克服了不可重復(fù)讀的問題,但是會(huì)引入幻讀的問題:
Spring數(shù)據(jù)庫事務(wù)處理
幻讀和可重復(fù)讀的區(qū)別:
幻讀是針對(duì)于統(tǒng)計(jì)的場(chǎng)景,而可重復(fù)讀是針對(duì)于一條數(shù)據(jù)而言的。

串行化

為了解決上述的各種問題,數(shù)據(jù)庫提出了串行化的隔離級(jí)別。
這種級(jí)別下,所有的sql都會(huì)按照順序執(zhí)行,可以完全保證數(shù)據(jù)的一致性。

合理使用數(shù)據(jù)庫隔離級(jí)別

Spring數(shù)據(jù)庫事務(wù)處理
雖然串行化可以解決臟讀、不可重復(fù)讀、幻讀等問題,但是它也有一個(gè)很顯著的特點(diǎn),就是并發(fā)能力低下,這四種隔離級(jí)別的并發(fā)能力排名如下:
未提交讀 > 讀寫提交 > 可重復(fù)讀 > 串行化
所以使用時(shí)需要根據(jù)具體的業(yè)務(wù)場(chǎng)景來權(quán)衡使用。

另外,不同數(shù)據(jù)對(duì)于隔離級(jí)別的支持也是不一樣的,比如:
Oracle:讀寫提交、串行化
MySQL:未提交讀、讀寫提交、可重復(fù)讀、串行化
PG:讀寫提交、可重復(fù)讀、串行化

Spring數(shù)據(jù)庫事務(wù)簡(jiǎn)介:

在 Spring 中,事務(wù)管理器的頂層接口為PlatformTransactionManager,Spring 還為此定義了一系列的接口和類,它們之間的關(guān)系如圖所示:
Spring數(shù)據(jù)庫事務(wù)處理
當(dāng)我們引入其它框架時(shí),還會(huì)有其它的事務(wù)管理器的類,比方說我們引入 Hibernate ,那么 Spring還會(huì)提供HibernateTransactionManager 與之對(duì)應(yīng)并給我們使用 。這里我們以 MyBatis 框架為例,去討論Spring 數(shù)據(jù)庫事務(wù)方面的問題,最常用到的事務(wù)管理器是 DataSourceTransactionManager 。從上圖中可以看到它也是一個(gè)實(shí)現(xiàn)了接口 PlatfonnTransactionManager 的類。

PlatfonnTransactionManager接口的源碼:

下面我們看一下PlatfonnTransactionManager接口的源碼:

public interface PlatformTransactionManager {
	// 獲取事務(wù)
	TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException;
	// 事務(wù)提交
	void commit(TransactionStatus status) throws TransactionException;
	// 事務(wù)回滾
	void rollback(TransactionStatus status) throws TransactionException;
}

可以看到它里面定義了獲取事務(wù)、提交事務(wù)、回滾事務(wù)的方法。而mybatis的事務(wù)管理器DataSourceTransactionManager實(shí)現(xiàn)了PlatformTransactionManager 接口,所以它也擁有了這些方法。

事務(wù)的傳播行為

所謂傳播行為,就是方法之間調(diào)用時(shí),事務(wù)采取的策略。

在Spring的事務(wù)機(jī)制中,對(duì)于數(shù)據(jù)庫而言存在7中傳播行為,它們都被定義在Propagation枚舉中,該枚舉源碼如下:

public enum Propagation {
	// 需要事務(wù),它也是默認(rèn)的傳播行為
	// 如果當(dāng)前存在事務(wù),就加入到當(dāng)前事務(wù)中一起運(yùn)行
	// 如果當(dāng)前不存在事務(wù),就新建一個(gè)事務(wù)來運(yùn)行方法
	// 使用頻次高
	REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),

	// 支持事務(wù)
	// 如果當(dāng)前存在事務(wù),就加入到當(dāng)前事務(wù)中一起運(yùn)行
	// 如果不存在,就繼續(xù)采用無事務(wù)的方式運(yùn)行
	SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),

	// 必須使用事務(wù)
	// 如果當(dāng)前存在事務(wù),就加入到當(dāng)前事務(wù)中一起運(yùn)行
	// 如果不存在事務(wù),就拋出異常
	MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),

	// 無論當(dāng)前是否存在事務(wù),都會(huì)創(chuàng)建一個(gè)新的事務(wù)來運(yùn)行
	// 使用頻次高
	REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),

	// 不支持事務(wù)
	// 如果當(dāng)前存在事務(wù),將掛起事務(wù)運(yùn)行
	NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),

	// 不支持事務(wù)
	// 如果存在事務(wù),就拋出異常
	// 如果不存在,就繼續(xù)采用無事務(wù)的方式運(yùn)行
	NEVER(TransactionDefinition.PROPAGATION_NEVER),

	// 事務(wù)嵌套
	// 當(dāng)前方法調(diào)用子方法時(shí),如果子方法出現(xiàn)異常,則只回滾子方法執(zhí)行過的sql,不會(huì)回滾當(dāng)前方法的事務(wù)
	// 使用頻次高
	NESTED(TransactionDefinition.PROPAGATION_NESTED);
}

REQUIRED、REQUIRES_NEW、NESTED這三種使用頻次較高,需要重點(diǎn)關(guān)注。

@Transactional注解

Spring對(duì)于事務(wù)的處理主要采用聲明式事務(wù)的方式,也就是通過@Transactional注解來進(jìn)行數(shù)據(jù)庫事務(wù)的管理。
下面是它的源碼:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
	// 通過bean的name來指定事務(wù)管理器
	@AliasFor("transactionManager")
	String value() default "";

	// 和value屬性一樣
	@AliasFor("value")
	String transactionManager() default "";

	// 設(shè)置事務(wù)傳播行為
	Propagation propagation() default Propagation.REQUIRED;

	// 設(shè)置事務(wù)隔離級(jí)別
	Isolation isolation() default Isolation.DEFAULT;

	// 指定超時(shí)時(shí)間(單位:秒)
	int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;

	// 是否只讀事務(wù)
	boolean readOnly() default false;

	// 方法在發(fā)生指定異常時(shí)進(jìn)行回滾,默認(rèn)是所有異常都會(huì)回滾
	Class<? extends Throwable>[] rollbackFor() default {};

	// 方法在發(fā)生指定異常名稱時(shí)進(jìn)行回滾,默認(rèn)是所有異常都會(huì)回滾
	String[] rollbackForClassName() default {};

	// 方法在發(fā)生指定異常時(shí)不進(jìn)行回滾,默認(rèn)是所有異常都會(huì)回滾
	Class<? extends Throwable>[] noRollbackFor() default {};
	
	// 方法在發(fā)生指定異常名稱時(shí)不進(jìn)行回滾,默認(rèn)是所有異常都會(huì)回滾
	String[] noRollbackForClassName() default {};
}

可以看到,我們?cè)谑褂聾Transactional注解時(shí),是可以自己設(shè)置事務(wù)的隔離級(jí)別、傳播行為、回滾機(jī)制等等。

@Transactional實(shí)戰(zhàn)

下面讓我們一起實(shí)際應(yīng)用下@Transactional對(duì)于數(shù)據(jù)庫事務(wù)的控制。
首先我們創(chuàng)建一個(gè)保存數(shù)據(jù)庫的,代碼如下:

REQUIRED傳播行為測(cè)試

@Service
@Slf4j
public class UserServiceImpl implements IUserService {
	......
	
	@Autowired
    @Lazy
    private IUserService userService;
    
	@Override
    @Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    public int insert(User user) {
        long oldId = user.getId();
        user.setId(null);
        userMapper.insert(user);
        if(oldId == 10){
            throw new IllegalArgumentException("事務(wù)回滾測(cè)試" + user.getId());
        }
        user.setUpdatedBy(10288931L);
        return userMapper.update(user);
    }

	@Override
    public boolean save(int times) {
        for(int timesTmp = 1; timesTmp <= times; timesTmp++){
            User user = easyRandom.nextObject(User.class);
            user.setId((long) timesTmp);
            try {
                userService.insert(user);
            }catch (Exception e){
                log.warn("出現(xiàn)了異常:{}", e.getMessage());
            }
        }
        return true;
    }
}

可以看到,我們將方法insert的事務(wù)傳播行為設(shè)置成了REQUIRED,也就是:
// 需要事務(wù),它也是默認(rèn)的傳播行為
// 如果當(dāng)前存在事務(wù),就加入到當(dāng)前事務(wù)中一起運(yùn)行
// 如果當(dāng)前不存在事務(wù),就新建一個(gè)事務(wù)來運(yùn)行方法
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),

注意:這里調(diào)用insert方法時(shí)需要通過代理對(duì)象調(diào)用,因?yàn)镾pring對(duì)于事務(wù)的處理是基于AOP實(shí)現(xiàn)的,所以如果不通過代理對(duì)象調(diào)用,就無法觸發(fā)事務(wù),也就是事務(wù)會(huì)失效。

然后將日志級(jí)別設(shè)置為DEBUG,這樣就可以看到事務(wù)相關(guān)的日志了:

logging.level.root=DEBUG
logging.level.org.springframework=DEBUG
logging.level.org.org.mybatis=DEBUG

按照REQUIRED傳播行為的特點(diǎn),此時(shí)調(diào)用它的save方法是沒有事務(wù)的,所以insert方法會(huì)單獨(dú)創(chuàng)建自己的事務(wù)來運(yùn)行,然后我們創(chuàng)建測(cè)試用的mapper和controller(這兩個(gè)就省略了,寫法都很簡(jiǎn)單),調(diào)用接口,可以看到日志如下:
Spring數(shù)據(jù)庫事務(wù)處理
可以看到我新增了5個(gè)user信息,日志中也是給insert方法創(chuàng)建了5個(gè)事務(wù)來運(yùn)行,這和REQUIRED傳播行為的特點(diǎn)是一致的。

此時(shí)我們給save方法也加上日志,如下所示:
@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

這個(gè)時(shí)候,對(duì)于insert方法來說,就是有事務(wù)的環(huán)境了,按照REQUIRED傳播行為的特點(diǎn),insert方法就不會(huì)自己?jiǎn)为?dú)創(chuàng)建事務(wù)了,而是沿用save方法的事務(wù),我們?cè)俅握{(diào)用接口,得到日志如下:

Spring數(shù)據(jù)庫事務(wù)處理
可以看到只是給save方法創(chuàng)建了事務(wù),并沒有給insert方法單獨(dú)創(chuàng)建事務(wù)
Spring數(shù)據(jù)庫事務(wù)處理
可以看到insert方法運(yùn)行時(shí),是加入到原有的事務(wù)之中的,這和REQUIRED傳播行為的特點(diǎn)是一致的。

REQUIRES_NEW傳播行為測(cè)試

現(xiàn)在我們將insert方法的事務(wù)傳播行為設(shè)置為REQUIRES_NEW,其特點(diǎn)如下所示:
// 無論當(dāng)前是否存在事務(wù),都會(huì)創(chuàng)建一個(gè)新的事務(wù)來運(yùn)行

接下來我們?cè)僬{(diào)用一下接口,得到如下日志:
Spring數(shù)據(jù)庫事務(wù)處理
可以看到這里是創(chuàng)建了6個(gè)事務(wù),其中有一個(gè)是save方法的事務(wù),其他5個(gè)都是insert方法自己的事務(wù)。這和REQUIRED傳播行為的特點(diǎn)是一致的。

NESTED傳播行為測(cè)試

// 事務(wù)嵌套
// 如果沒有事務(wù),則創(chuàng)建一個(gè)自己的事務(wù)
// 如果當(dāng)前有事務(wù),則創(chuàng)建一個(gè)嵌套的事務(wù)
// 當(dāng)前方法調(diào)用子方法時(shí),如果子方法出現(xiàn)異常,則只回滾子方法執(zhí)行過的sql,不會(huì)回滾當(dāng)前方法的事務(wù)

更改insert方法的事務(wù)如下:
@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.NESTED, rollbackFor = Exception.class)

同時(shí)去掉save方法的事務(wù),再次調(diào)用接口,得到如下日志:
Spring數(shù)據(jù)庫事務(wù)處理
此時(shí)save方法沒有添加事務(wù),所以按照NESTED傳播行為的特點(diǎn),insert方法會(huì)創(chuàng)建自己的事務(wù)。

然后我們?cè)賹ave方法添加上事務(wù),再次調(diào)用接口,得到日志如下:
Spring數(shù)據(jù)庫事務(wù)處理
Spring數(shù)據(jù)庫事務(wù)處理
因?yàn)榇藭r(shí)save方法添加了事務(wù),所以insert方法會(huì)創(chuàng)建一個(gè)嵌套在save方法里面的事務(wù)。

有個(gè)注意點(diǎn):對(duì)于嵌套事務(wù)來說,當(dāng)前方法調(diào)用子方法時(shí),如果子方法出現(xiàn)異常,則只回滾子方法執(zhí)行過的sql,不會(huì)回滾當(dāng)前方法的事務(wù),這個(gè)效果是通過數(shù)據(jù)庫的保存點(diǎn)技術(shù)來實(shí)現(xiàn)的,至于數(shù)據(jù)庫的保存點(diǎn)技術(shù),可以自行了解一下。

好了,今天就到這里了,感興趣的小伙伴趕緊去試試吧,拜拜。文章來源地址http://www.zghlxwxcb.cn/news/detail-469224.html

到了這里,關(guān)于Spring數(shù)據(jù)庫事務(wù)處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 知識(shí)圖譜:Neo4j數(shù)據(jù)庫的基本使用——?jiǎng)?chuàng)建張學(xué)良的關(guān)系譜

    知識(shí)圖譜:Neo4j數(shù)據(jù)庫的基本使用——?jiǎng)?chuàng)建張學(xué)良的關(guān)系譜

    ????????知識(shí)圖譜(Knowledge Graph)是人工智能的重要分支技術(shù),它在2012年由谷歌提出,是結(jié)構(gòu)化的語義知識(shí)庫,用于以符號(hào)形式描述物理世界中的概念及其相互關(guān)系,其基本組成單位是“實(shí)體—關(guān)系—實(shí)體”三元組,以及實(shí)體及其相關(guān)屬性—值對(duì),實(shí)體間通過關(guān)系相互聯(lián)

    2024年02月04日
    瀏覽(25)
  • spring事務(wù)和數(shù)據(jù)庫事務(wù)是怎么實(shí)現(xiàn)

    Spring事務(wù)的本質(zhì)其實(shí)就是數(shù)據(jù)庫對(duì)事務(wù)的支持,沒有數(shù)據(jù)庫的事務(wù)支持,spring是無法提供事務(wù)功能的。對(duì)于純JDBC操作數(shù)據(jù)庫,想要用到事務(wù),可以按照以下步驟進(jìn)行: 獲取連接 Connection con = DriverManager.getConnection() 開啟事務(wù)con.setAutoCommit(true/false); 執(zhí)行CRUD 提交事務(wù)/回滾事務(wù)

    2024年02月13日
    瀏覽(27)
  • 數(shù)據(jù)庫的事務(wù)處理

    數(shù)據(jù)庫的事務(wù)處理

    在現(xiàn)代信息化時(shí)代,大量的數(shù)據(jù)不斷地被創(chuàng)建、修改、刪除和查詢。 為了保證數(shù)據(jù)的準(zhǔn)確性和一致性,數(shù)據(jù)庫的事務(wù)處理成為了必不可少的一個(gè)重要組成部分。 本文將針對(duì)數(shù)據(jù)庫的事務(wù)處理進(jìn)行詳細(xì)闡述,包括事務(wù)的概念、特性、ACID屬性、隔離級(jí)別以及事務(wù)的并發(fā)控制等方

    2024年02月06日
    瀏覽(29)
  • 【Spring/MySQL數(shù)據(jù)庫系列】數(shù)據(jù)庫事務(wù)的特點(diǎn)與隔離級(jí)別

    【Spring/MySQL數(shù)據(jù)庫系列】數(shù)據(jù)庫事務(wù)的特點(diǎn)與隔離級(jí)別

    ?? 前面的話 ?? 本文已經(jīng)收錄到《Spring框架全家桶系列》專欄,本文將介紹有關(guān)數(shù)據(jù)庫事務(wù)的特點(diǎn)以及隔離級(jí)別。 ??博客主頁:未見花聞的博客主頁 ??歡迎關(guān)注??點(diǎn)贊??收藏??留言?? ??本文由 未見花聞 原創(chuàng), CSDN 首發(fā)! ??首發(fā)時(shí)間:??2023年5月20日?? ??堅(jiān)

    2024年02月05日
    瀏覽(25)
  • 再相逢【知識(shí)圖譜】中文醫(yī)學(xué)知識(shí)圖譜CMeKG,中文產(chǎn)科醫(yī)學(xué)知識(shí)圖譜COKG | 附:圖數(shù)據(jù)庫Neo4j下載安裝教學(xué)(遇到問題并解決) + Neo4j基本操作

    ? 無論結(jié)果如何,請(qǐng)相信那些你努力游向岸的日子都有它的意義。 ? ?? 作者主頁 : 追光者♂ ?? ???????? ?? 個(gè)人簡(jiǎn)介 : 計(jì)算機(jī)專業(yè)碩士研究生 ??、 2022年CSDN博客之星人工智能領(lǐng)域TOP4 ??、 阿里云社區(qū)特邀專家博主 ??、 CSDN-人工智能領(lǐng)域新星創(chuàng)作者 ??、 預(yù)期20

    2024年02月14日
    瀏覽(22)
  • Spring事務(wù)管理 | 數(shù)據(jù)庫連接池流程原理分析

    Spring事務(wù)管理 | 數(shù)據(jù)庫連接池流程原理分析

    ??wei_shuo的個(gè)人主頁 ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! 事務(wù)(Transaction),一般是指要做的或所做的事情。在計(jì)算機(jī) 術(shù)語 中是指訪問并可能更新數(shù)據(jù)庫中各種 數(shù)據(jù)項(xiàng) 的一個(gè)程序 執(zhí)行單元 。事務(wù)通常由 高級(jí)數(shù)據(jù)庫 操縱語言或編程語言(如SQL,C++或Java)書寫的 用戶程序

    2024年02月02日
    瀏覽(29)
  • Spring Boot中操作數(shù)據(jù)庫的幾種并發(fā)事務(wù)方式

    當(dāng)有多個(gè) 并發(fā) 事務(wù)時(shí),會(huì)發(fā)生丟失更新異常。來自一個(gè)或多個(gè) 事務(wù) 的更新可能會(huì)丟失,因?yàn)槠渌聞?wù)會(huì)用其結(jié)果覆蓋它。 讓我們通過一個(gè)例子來檢驗(yàn)一下??紤]以下執(zhí)行事務(wù)的方法。 public void withdraw(Long accountId, double amount) { Account account = accountRepository.findById(accountId).orEl

    2024年01月22日
    瀏覽(42)
  • 【SQL Server】數(shù)據(jù)庫開發(fā)指南(八)高級(jí)數(shù)據(jù)處理技術(shù) MS-SQL 事務(wù)、異常和游標(biāo)的深入研究

    【SQL Server】數(shù)據(jù)庫開發(fā)指南(八)高級(jí)數(shù)據(jù)處理技術(shù) MS-SQL 事務(wù)、異常和游標(biāo)的深入研究

    本系列博文還在更新中,收錄在專欄:#MS-SQL Server 專欄中。 本系列文章列表如下: 【SQL Server】 Linux 運(yùn)維下對(duì) SQL Server 進(jìn)行安裝、升級(jí)、回滾、卸載操作 【SQL Server】數(shù)據(jù)庫開發(fā)指南(一)數(shù)據(jù)庫設(shè)計(jì)的核心概念和基本步驟 【SQL Server】數(shù)據(jù)庫開發(fā)指南(二)MSSQL數(shù)據(jù)庫開發(fā)對(duì)

    2024年02月07日
    瀏覽(104)
  • 音頻數(shù)據(jù)處理基本知識(shí)學(xué)習(xí)——降噪濾波基礎(chǔ)知識(shí)

    濾波是一種信號(hào)處理方法,它可以通過消除或減弱信號(hào)中的某些頻率分量,來實(shí)現(xiàn)信號(hào)的去噪、去除干擾、增強(qiáng)某些頻率成分等目的。常見的濾波方法包括低通濾波、高通濾波、帶通濾波等。 降噪是一種信號(hào)處理方法,它可以通過消除或減弱信號(hào)中的噪聲成分,來提高信號(hào)的

    2024年02月15日
    瀏覽(35)
  • Spring Boot使用jasypt處理數(shù)據(jù)庫賬號(hào)密碼等數(shù)據(jù)加密問題

    在我們業(yè)務(wù)場(chǎng)景中,項(xiàng)目中的application.yml 配置文件比如數(shù)據(jù)庫賬號(hào)密碼,的各種鏈接的username,password的值都是明文的,存在一定的安全隱患,可以使用jasypt?加密框架的方式進(jìn)行明文加密,進(jìn)而使得我們項(xiàng)目更加安全 注意這里排除了mybatis-plus的包可能是項(xiàng)目中有沖突依賴,

    2024年02月06日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包