简述
本周主要的工作任务是,将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
- 说明:
首先,要支持MongoDB事务,则必须用spring data 2.x以上的版本,详见官网 What's new in springData 2.1
而 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