美文网首页
SpringBoot中使用MongoDB

SpringBoot中使用MongoDB

作者: PC_Repair | 来源:发表于2018-08-01 11:21 被阅读271次
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

相关文章

网友评论

      本文标题:SpringBoot中使用MongoDB

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