mongoDB 事務(springboot)


原文:https://www.cnblogs.com/vettel0329/p/10778931.html

 

mongoDB單個實例不支持事務,副本集才支持事務

  • 1.准備好docker
  • 2.Spring boot 版本為2.1.1.RELEASE及以上

首先以主從模式安裝mongodb 4.0.0以上的數據庫實例,使用以下docker命令安裝:(最新版不支持這種模式,必須是副本及模式,如果簡單測試,可以使用)  

副本集搭建:https://www.cnblogs.com/lshan/p/12011980.html

docker run --privileged=true -p 10011:27017 -v $PWD/db1:/data/db -d --name template-db1 mongo:4.0.0 --replSet "templateRs0" --bind_ip_all 

docker run --privileged=true -p 10012:27017 -v $PWD/db2:/data/db -d --name template-db2 mongo:4.0.0 --replSet "templateRs0" --bind_ip_all 


原文鏈接:https://blog.csdn.net/quanmaoluo5461/article/details/84880850

然后連接到一個數據庫實例以以下腳本初始化主節點:

rs.initiate( {
   _id : "templateRs0",
   members: [
      { _id: 0, host: "172.16.2.87:10011" },
      { _id: 1, host: "172.16.2.87:10012" },
   ]
})

rs.status()

 

依賴:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

 

創建配置類,開啟事務

@Configuration
public class TransactionConfig {

    @Bean
    MongoTransactionManager transactionManager(MongoDbFactory factory){
        return new MongoTransactionManager(factory);
    }

}

 

 

開啟事務:

@Service
public class UserService {

    @Resource
    MongoTemplate mongotemplate;

    public List<User> getAllUser(){
        return mongotemplate.findAll(User.class);
    }

   @Transactional public boolean addUser(User user, UserInfo userInfo){
        user.setUserInfo(userInfo);
        mongotemplate.save(userInfo);
//        int a = 1/0;    //事務測試代碼
        mongotemplate.save(user);
        return true;
    }

}

 

注:以上為MongoTemplate方式,MongoTemplate和MongoRepository方式都與Spring整合SpringDataMongoDB相同

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM