mongoDB 事务(springboot)
<p>原文:https://www.cnblogs.com/vettel0329/p/10778931.html</p><p> </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> </p>
<p>依赖:</p>
<div class="cnblogs_code">
<pre><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency></pre>
</div>
<p> </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> </p>
<p> </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<User><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> </p>
<p><span style="color: rgba(255, 0, 0, 1)">注:以上为MongoTemplate方式,MongoTemplate和MongoRepository方式都与Spring整合SpringDataMongoDB相同</span></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/lshan/p/13323248.html
頁:
[1]