美文网首页
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