MongoDB特性与使用场景
- 比较常见的,我们可以直接用MongoDB来存储键值对类型的数据,如:验证码、Session等;
- 由于MongoDB的横向扩展能力,可以用来存储数据规模会在未来变得非常巨大的数据,如:日志、评论等;
- 由于MongoDB存储数据的弱类型,也可以用来存储一些多变的json数据;
- 对于一些对数据有复杂的高事务性要求的操作,如:账户交易等就不适合使用MongoDB来存储;
使用MongoDB
MongoDB数据库配置与使用请移步:https://www.jianshu.com/p/d17563dd2cb2
-
pom.xml
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- User实体
public class User {
@Id
private Long id;
private String username;
private Integer age;
public User(Long id, String username, Integer age) {
this.id = id;
this.username = username;
this.age = age;
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
}
- 实现User的数据访问对象:UserRepository
public interface UserRepository extends MongoRepository<User, Long> {
User findByUsername(String username);
}
- 单元测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class ApplicationTests {
@Autowired
private UserRepository userRepository;
@Before
public void setUp() {
userRepository.deleteAll();
}
@Test
public void test() throws Exception {
// 创建三个User,并验证User总数
userRepository.save(new User(1L, "didi", 30));
userRepository.save(new User(2L, "mama", 40));
userRepository.save(new User(3L, "kaka", 50));
Assert.assertEquals(3, userRepository.findAll().size());
// 删除一个User,再验证User总数
User u = userRepository.findOne(1L);
userRepository.delete(u);
Assert.assertEquals(2, userRepository.findAll().size());
// 删除一个User,再验证User总数
u = userRepository.findByUsername("mama");
userRepository.delete(u);
Assert.assertEquals(1, userRepository.findAll().size());
}
}
在实战中,应用服务器与MongoDB通常不会部署在同一台设备上,这样就无法使用上面的自动化配置来进行使用。此时,我们可以通过参数配置来完成支持,操作如下:
application.properties
spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test
在尝试此配置时,记得在mongo中对test库创建具备读写权限的用户(用户名为name,密码为pass),不同版本的创建语句不同。
SpringBoot增强对MongoDB的配置(连接池等)
注意:此处增强对MongoDB的配置对SpringBoot的版本或许有要求,此处的版本为(使用1.3版本出现过报错):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
- 添加项目依赖
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>mongodb-plus-spring-boot-starter</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
- 在应用主类上增加
@EnableMongoPlus
注解,如:
@EnableMongoPlus
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
-
application.properties
参数配置
spring.data.mongodb.option.min-connection-per-host=20
spring.data.mongodb.option.max-connection-per-host=200
- 可配置参数(下面为默认值)
spring.data.mongodb.option.min-connection-per-host=0
spring.data.mongodb.option.max-connection-per-host=100
spring.data.mongodb.option.threads-allowed-to-block-for-connection-multiplier=5
spring.data.mongodb.option.server-selection-timeout=30000
spring.data.mongodb.option.max-wait-time=120000
spring.data.mongodb.option.max-connection-idle-time=0
spring.data.mongodb.option.max-connection-life-time=0
spring.data.mongodb.option.connect-timeout=10000
spring.data.mongodb.option.socket-timeout=0
spring.data.mongodb.option.socket-keep-alive=false
spring.data.mongodb.option.ssl-enabled=false
spring.data.mongodb.option.ssl-invalid-host-name-allowed=false
spring.data.mongodb.option.always-use-m-beans=false
spring.data.mongodb.option.heartbeat-socket-timeout=20000
spring.data.mongodb.option.heartbeat-connect-timeout=20000
spring.data.mongodb.option.min-heartbeat-frequency=500
spring.data.mongodb.option.heartbeat-frequency=10000
spring.data.mongodb.option.local-threshold=15
网友评论