国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

mongoDB 4.0 事務

dabai / 1945人閱讀

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

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

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

創(chuàng)建測試數據

user

info

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

    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:數據寫入到副本集大多數成員后向客戶端發(fā)送確認,適用于對數據安全性要求比較高的場景,該選項會降低寫入性能
w=1:默認的writeConcern,數據寫入到Primary就向客戶端發(fā)送確認
Read Concern推薦閱讀MongoDB readConcern 原理解析
spring.data.mongodb.uri=mongodb+srv://vulgar:761341@cluster0-t16it.mongodb.net/vulgar_test?retryWrites=true&w=majority
配置mongoDB事務管理
@Configuration
public class MongoTransactionConfiguration {

    @Bean
    MongoTransactionManager mongoTransactionManager(MongoDbFactory factory) {
        return new MongoTransactionManager(factory);
    }
}
創(chuàng)建對應實體類

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)建測試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));
        //測試事務回滾
        int i = 1/0;
    }
}
創(chuàng)建測試CONTROLLER
@Slf4j
@RestController
public class MongoController {

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

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

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


最后查看mongoDB中的數據,可以看到數據沒有被更改。

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

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75074.html

相關文章

  • 認識 MongoDB 4.0 的新特性——事務(Transactions)

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

    崔曉明 評論0 收藏0
  • 探坑mongoDB4.0事務回滾的辛酸歷程

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

    wupengyu 評論0 收藏0
  • MongoDB 客戶端連接選項

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

    yexiaobai 評論0 收藏0
  • MongoDB漫談數據庫

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

    Carl 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<