王春良 發表於 2020-7-16 16:19:00

mongoDB 事务(springboot)

<p>原文:https://www.cnblogs.com/vettel0329/p/10778931.html</p>
<p>&nbsp;</p>
<p>mongoDB单个实例不支持事务,副本集才支持事务</p>
<ul>
<li>1.准备好docker</li>
<li>2.Spring boot 版本为2.1.1.RELEASE及以上</li>
</ul>
<p>首先以主从模式安装mongodb 4.0.0以上的数据库实例,使用以下docker命令安装:<span style="background-color: rgba(255, 153, 0, 1)">(最新版不支持这种模式,必须是副本及模式,如果简单测试,可以使用)  </span></p>
<p><span style="background-color: rgba(255, 153, 0, 1)">副本集搭建:https://www.cnblogs.com/lshan/p/12011980.html</span></p>
<div class="cnblogs_code">
<pre>docker run --privileged=<span style="color: rgba(0, 0, 255, 1)">true</span> -p <span style="color: rgba(128, 0, 128, 1)">10011</span>:<span style="color: rgba(128, 0, 128, 1)">27017</span> -v $PWD/db1:/data/db -d --name template-db1 mongo:<span style="color: rgba(128, 0, 128, 1)">4.0</span>.<span style="color: rgba(128, 0, 128, 1)">0</span> --replSet <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">templateRs0</span><span style="color: rgba(128, 0, 0, 1)">"</span> --<span style="color: rgba(0, 0, 0, 1)">bind_ip_all

docker run </span>--privileged=<span style="color: rgba(0, 0, 255, 1)">true</span> -p <span style="color: rgba(128, 0, 128, 1)">10012</span>:<span style="color: rgba(128, 0, 128, 1)">27017</span> -v $PWD/db2:/data/db -d --name template-db2 mongo:<span style="color: rgba(128, 0, 128, 1)">4.0</span>.<span style="color: rgba(128, 0, 128, 1)">0</span> --replSet <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">templateRs0</span><span style="color: rgba(128, 0, 0, 1)">"</span> --<span style="color: rgba(0, 0, 0, 1)">bind_ip_all

</span><span style="color: rgba(0, 0, 0, 1)">
原文链接:https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">blog.csdn.net/quanmaoluo5461/article/details/84880850</span></pre>
</div>
<p>然后连接到一个数据库实例以以下脚本初始化主节点:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">rs.initiate( {
   _id : </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">templateRs0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
   members: [
      { _id: </span><span style="color: rgba(128, 0, 128, 1)">0</span>, host: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">172.16.2.87:10011</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
      { _id: </span><span style="color: rgba(128, 0, 128, 1)">1</span>, host: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">172.16.2.87:10012</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> },
   ]
})
<br></span></pre>
</div>
<pre class="prettyprint"><code class="has-numbering">rs.status()</code></pre>
<p>&nbsp;</p>
<p>依赖:</p>
<div class="cnblogs_code">
<pre>&lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-data-mongodb&lt;/artifactId&gt;
&lt;/dependency&gt;</pre>
</div>
<p>&nbsp;</p>
<p><span style="font-size: 18px"><strong>创建配置类,开启事务</strong></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@Configuration
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> TransactionConfig {

    @Bean
    MongoTransactionManager transactionManager(MongoDbFactory factory){
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MongoTransactionManager(factory);
    }

}</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 18pt">开启事务:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@Service
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> UserService {

    @Resource
    MongoTemplate mongotemplate;

    </span><span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;User&gt;<span style="color: rgba(0, 0, 0, 1)"> getAllUser(){
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> mongotemplate.findAll(User.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
    }

<span style="background-color: rgba(255, 255, 0, 1)">@Transactional
    </span></span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> boolean addUser(User user, UserInfo userInfo){
      user.setUserInfo(userInfo);
      mongotemplate.save(userInfo);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">      int a = 1/0;    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">事务测试代码</span>
<span style="color: rgba(0, 0, 0, 1)">      mongotemplate.save(user);
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
    }

}</span></pre>
</div>
<p>&nbsp;</p>
<p><span style="color: rgba(255, 0, 0, 1)">注:以上为MongoTemplate方式,MongoTemplate和MongoRepository方式都与Spring整合SpringDataMongoDB相同</span></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/lshan/p/13323248.html
頁: [1]
查看完整版本: mongoDB 事务(springboot)