成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

mongoDB 4.0 事務(wù)

dabai / 2024人閱讀

摘要:官網(wǎng)中,對(duì)單文檔的操作是原子性的。因此建議使用嵌入式文檔來(lái)實(shí)現(xiàn)事務(wù)需求,而不是規(guī)范化的跨文檔設(shè)計(jì)。所以開始提供了對(duì)副本集多文檔事務(wù)的支持,注意是副本集,也就是說(shuō)單是不生效的。上面創(chuàng)建的中的上添加了提供的注解,所以的事務(wù)可以和的事務(wù)統(tǒng)一管理。

官網(wǎng):mongoDB中,對(duì)單文檔的操作是原子性的。例如insertOneupdateOne等操作。因此建議使用嵌入式文檔來(lái)實(shí)現(xiàn)事務(wù)需求,而不是規(guī)范化的跨文檔設(shè)計(jì)。但是業(yè)務(wù)上例如三方數(shù)據(jù)依賴的需求往往使用嵌入式文檔不是理想中的那么方便。所以4.0開始提供了對(duì)副本集多文檔事務(wù)的支持,注意是副本集,也就是說(shuō)單server是不生效的。

接下來(lái)的測(cè)試需要集群環(huán)境,賴得搭建,所以使用mongoDB Cloud提供的Altas的免費(fèi)集群。

創(chuàng)建測(cè)試數(shù)據(jù)

user

info

創(chuàng)建springboot項(xiàng)目 添加依賴

    org.springframework.boot
    spring-boot-starter-parent
    2.1.5.RELEASE



    
        org.springframework.boot
        spring-boot-starter-web
    
    
    
        org.projectlombok
        lombok
        true
    
    
        com.alibaba
        fastjson
        1.2.58
    

    
        org.springframework.boot
        spring-boot-starter-data-mongodb
    

連接mongoDB

這里涉及到了Write Concern,推薦閱讀MongoDB writeConcern原理解析
w=majority:數(shù)據(jù)寫入到副本集大多數(shù)成員后向客戶端發(fā)送確認(rèn),適用于對(duì)數(shù)據(jù)安全性要求比較高的場(chǎng)景,該選項(xiàng)會(huì)降低寫入性能
w=1:默認(rèn)的writeConcern,數(shù)據(jù)寫入到Primary就向客戶端發(fā)送確認(rèn)
Read Concern推薦閱讀MongoDB readConcern 原理解析
spring.data.mongodb.uri=mongodb+srv://vulgar:761341@cluster0-t16it.mongodb.net/vulgar_test?retryWrites=true&w=majority
配置mongoDB事務(wù)管理
@Configuration
public class MongoTransactionConfiguration {

    @Bean
    MongoTransactionManager mongoTransactionManager(MongoDbFactory factory) {
        return new MongoTransactionManager(factory);
    }
}
創(chuàng)建對(duì)應(yīng)實(shí)體類

User.class

@Data
@Document(collection = "user")
public class User implements Serializable {
    private static final long serialVersionUID = -7257487638617643262L;

    private String username;

    private String password;

    private String sex;

    private Integer age;

    private String email;
}

Info.class

@Data
@Document(collection = "info")
public class Info implements Serializable {
    private static final long serialVersionUID = 4494527542566322152L;

    private String username;

    private String description;
}
創(chuàng)建測(cè)試SERVICE
@Slf4j
@Service("mongoService")
public class MongoService {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Transactional(rollbackFor = ArithmeticException.class)
    public void updateWithTransaction() {
        Query query = new Query(Criteria.where("username").is("vulgar-cd"));
        Update update = new Update();
        update.set("age", 10);
        mongoTemplate.updateFirst(query, update, User.class);
        User user = mongoTemplate.findOne(query, User.class);
        log.info("user is {}", JSON.toJSON(user));
        update = new Update();
        update.set("description", "hahahaha");
        mongoTemplate.updateFirst(query, update, Info.class);
        Info info = mongoTemplate.findOne(query, Info.class);
        log.info("info is {}", JSON.toJSON(info));
        //測(cè)試事務(wù)回滾
        int i = 1/0;
    }
}
創(chuàng)建測(cè)試CONTROLLER
@Slf4j
@RestController
public class MongoController {

    @Resource(name = "mongoService")
    private MongoService mongoService;

    @GetMapping("/transaction")
    public void updateWithTransaction() {
        mongoService.updateWithTransaction();
    }
}
啟動(dòng)引用程序

可以看到程序連上了集群,然后在終端執(zhí)行curl http://localhost:8080/transaction可以看到如下日志


最后查看mongoDB中的數(shù)據(jù),可以看到數(shù)據(jù)沒有被更改。

上面創(chuàng)建的MongoService中的updateWithTransaction上添加了spring提供的@Transactional注解,所以mongoDB的事務(wù)可以和mysql的事務(wù)統(tǒng)一管理。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/75074.html

相關(guān)文章

  • 認(rèn)識(shí) MongoDB 4.0 的新特性——事務(wù)(Transactions)

    摘要:介紹事務(wù)和副本集副本集是的一種主副節(jié)點(diǎn)架構(gòu),它使數(shù)據(jù)得到最大的可用性,避免單點(diǎn)故障引起的整個(gè)服務(wù)不能訪問(wèn)的情況的發(fā)生。在事務(wù)中執(zhí)行的數(shù)據(jù)操作是對(duì)外隔離的,也就是說(shuō)事務(wù)中的操作是原子性的。中止當(dāng)前的事務(wù),并將事務(wù)中執(zhí)行過(guò)的數(shù)據(jù)修改回滾。 前言 相信使用過(guò)主流的關(guān)系型數(shù)據(jù)庫(kù)的朋友對(duì)事務(wù)(Transactions)不會(huì)太陌生,它可以讓我們把對(duì)多張表的多次數(shù)據(jù)庫(kù)操作整合為一次原子操作,這在高并...

    崔曉明 評(píng)論0 收藏0
  • 探坑mongoDB4.0事務(wù)回滾的辛酸歷程

    摘要:參考鏈接官方關(guān)于事務(wù)的介紹中文社區(qū)關(guān)于的介紹如果不想進(jìn)行第二步,可以直接為你創(chuàng)建一個(gè)新的復(fù)制集我只是個(gè)前端啊,為什么要這么折磨我 主管前幾天發(fā)現(xiàn)mongoDB已經(jīng)升級(jí)到4.0了,迫不及待得讓我實(shí)現(xiàn)他期待已久的事務(wù)回滾,發(fā)現(xiàn)還是有很多坑啊!下面是我將已有的本地mongoDB升級(jí)到支持事務(wù)回滾的歷程,分享出來(lái),有錯(cuò)誤的地方歡迎指正!以mac為例哈 部署mongodb事務(wù)回滾 1.準(zhǔn)備工作 ...

    wupengyu 評(píng)論0 收藏0
  • MongoDB 客戶端連接選項(xiàng)

    摘要:原文保持更新及修正基于的客戶端配置選項(xiàng),其它驅(qū)動(dòng)大同小異。連接池中連接的最大使用壽命毫秒。設(shè)置該選項(xiàng)后,客戶端將進(jìn)行以下行為以副本集模式連接,并根據(jù)給定的服務(wù)器發(fā)現(xiàn)副本集的所有成員。該選項(xiàng)可以和配合使用。編解碼器用于對(duì)進(jìn)行編碼和解碼。 原文保持更新及BUG修正:http://kweny.io/mongodb-clien... 基于 MongoDB Java Driver 3.8.1 ...

    yexiaobai 評(píng)論0 收藏0
  • MongoDB漫談數(shù)據(jù)庫(kù)

    摘要:可水平擴(kuò)展,可以添加更多服務(wù)器來(lái)擴(kuò)展您的數(shù)據(jù)庫(kù)需要管理員是否開發(fā)人員和管理員都可以使用適用場(chǎng)景會(huì)計(jì)師事務(wù)所和銀行,以及需要具有清晰架構(gòu)的結(jié)構(gòu)化數(shù)據(jù)的其他公司。 今天的主題是從MongoDB漫談數(shù)據(jù)庫(kù),在日常的項(xiàng)目中,我們一般都是使用的mysql作為數(shù)據(jù)庫(kù),但是一旦有問(wèn)題,又常常會(huì)聽到類似要不換成MongoDB試試的聲音,因此就讓我們這些小白來(lái)隨便聊聊數(shù)據(jù)庫(kù) 什么是數(shù)據(jù)庫(kù) 我們就用最簡(jiǎn)單...

    Carl 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<