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

2019-07-11  本文已影响0人  挺婷Tina

简述

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

前期依赖准备

加入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

上一篇 下一篇

猜你喜欢

热点阅读