美文网首页
springboot2.x集成mongoDB (支持事务)

springboot2.x集成mongoDB (支持事务)

作者: 挺婷Tina | 来源:发表于2019-07-11 23:08 被阅读0次

简述

本周主要的工作任务是,将mongDB集成到Springboot中,并且要用注解事务(@Transactional),本文记录下集成过程。

前期依赖准备

  • 要支持多文档事务,mongo版本必须为4.0以上
  • 开启replica-set(多文档事务必须要在replica-set的基础上才能开启,MongoDB官网上有描述),具体怎么开启可参考此文: windows下配置replica-set
  • 查看mongodb的数据库是否能正确连接
    此处推荐mongodb数据的可视化工具:adminMongo,或者用官方的mongoCompass。

加入pom的内容

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

依赖的版本

注意,springBoot版本必须为2.1.x以上,而且对应的SpringCloud版本为Greenwich

  • 说明:
  1. 首先,要支持MongoDB事务,则必须用spring data 2.x以上的版本,详见官网 What's new in springData 2.1

  2. 而 spring data 2.x 要求spring framework 5.1.8以上的版本,详见官网
    requirement

相应的springBoot版本则需为2.1.x以上

propeties文件

spring.data.mongodb.uri=mongodb://user:secret@127.0.0.1:27000/test

注意:这里的uri只需要填主库的地址

代码部分

step 1:添加事务的配置类

@Configuration
@EnableMongoRepositories
@EnableTransactionManagement
@ComponentScan
public class MongoDBConfig extends AbstractMongoConfiguration{

    @Value("${spring.data.mongodb.port}")
    private int port;

    @Value("${spring.data.mongodb.host}")
    private String host;

    @Value("${spring.data.mongodb.database}")
    private String dbName;
    
    @Bean
    MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
    }

    @Override
    protected String getDatabaseName() {
        return dbName;
    }

    @Override
    public MongoClient mongoClient() {
        return new MongoClient(host, port);
    }
}

Step 2 :编写User实体类

@Data
@Document
public class User implements Serializable {
    private static final long serialVersionUID = -3258839839160856613L;

    private String userName;
    private String passWord;

    @Override
    public String toString() {
        return "UserEntity{" +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                '}';
    }
}

Step 3 :继承MongoDBRepository,实现CRUD的接口

@Repository
public interface UserRepository extends MongoRepository<User, Long> {
}

Step 4: 添加外部访问的controller

@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping( "/user")
    @Transactional(rollbackFor = Exception.class)
    public void addUser(String userName, String password) throws Exception {
        User user1 = new User();
        user1.setPassWord(password);
        user1.setUserName(userName);
        userRepository.save(user1);
//        throw new Exception("test"); 可以去掉注释,在此行抛异常进行事务的测试
    }
}

至此,你应该可以成功地往mongoDB里插入数据了。
github源码地址:https://github.com/huinew/springboot-example

相关文章

网友评论

      本文标题:springboot2.x集成mongoDB (支持事务)

      本文链接:https://www.haomeiwen.com/subject/ddskkctx.html