前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot 中 mongo多数据源配置新姿势

SpringBoot 中 mongo多数据源配置新姿势

作者头像
码农小胖哥
发布2019-12-10 15:50:21
5520
发布2019-12-10 15:50:21
举报

SpringBoot对常用的数据库支持外,对NoSQL 数据库也进行了封装自动化。这一篇主要讲springboot与mongo多数据源相关的配置

1、mongo的介绍

MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,这里不再多做说明。详细介绍参考mongo入门

2、项目构建

添加pom文件

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

3、在application.properties中添加配置

代码语言:javascript
复制
##start mongodb for basic
#----------------------------------------------
basic.mongodb.host= 127.0.0.1
basic.mongodb.port= 27017
basic.mongodb.database= basic
#----------------------------------------------
##end mongodb for spirit

##start mongodb for basic
#----------------------------------------------
order.mongodb.host= 127.0.0.2
order.mongodb.port= 27017
order.mongodb.database= order
#----------------------------------------------
##end mongodb for spirit

4、配置相应的数据源

这里我们采用mongoTemplate这种模式去做mongo的相关操作

先写一个基础的抽象类

代码语言:javascript
复制
public abstract class AbstractMongoConfigure {

    private String host, database;
    private int port;
    /*
       * Method that creates MongoDbFactory
       * Common to both of the MongoDb connections
       */
    public MongoDbFactory mongoDbFactory() throws Exception {

        return new SimpleMongoDbFactory(new MongoClient(host, port), database);
    }

    /*
     * Factory method to create the MongoTemplate
     */
    abstract public MongoTemplate getMongoTemplate() throws Exception;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getDatabase() {
        return database;
    }

    public void setDatabase(String database) {
        this.database = database;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }
}

3.1)接下来第一个库的封装

代码语言:javascript
复制
@Configuration
@EnableMongoRepositories(basePackages = {"com.sunliangliang.service.basic"}, mongoTemplateRef = "basicMongoTemplate")
@ConfigurationProperties(prefix = "basic.mongodb")
public class BasicMongoConfigure extends AbstractMongoConfigure {
    @Override
    @Bean(name = "basicMongoTemplate")
    public MongoTemplate getMongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

其中 basePackages 的值是该库应用于相应的基础包,prefix即为相应的applications中的配置值

3.2)接下来第两个库的封装
代码语言:javascript
复制
@Configuration
@EnableMongoRepositories(basePackages = {"com.sunliangliang.service.order"}, mongoTemplateRef = "orderMongoTemplate")
@ConfigurationProperties(prefix = "order.mongodb")
public class OrderMongoConfigure extends AbstractMongoConfigure{
    @Primary
    @Override
    @Bean(name = "orderMongoTemplate")
    public MongoTemplate getMongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

封装完成后接下来进行相应实体的配置

4、创建数据实体

代码语言:javascript
复制
public class UserInfo implements Serializable{
    private long id;
    private String username;
    private String password;
    private String nickname;
    private int age;
    private String name;

    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 String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4、添加对实体的操作

在这里我写了一个公用的接口用于基础的增删改查

代码语言:javascript
复制
public interface BaseService<T> {
    Boolean save(T entity);

    Boolean update(T entity);

    Boolean delete(Long id);

    T getById(Long id);

    List<T> listAll();

    List<T> listAll(T entity);
}

接下来接口的实现

代码语言:javascript
复制
@Service
public class UserInfoService implements BaseService<UserInfo>{
    @Autowired
    @Qualifier("basicMongoTemplate")
    private MongoTemplate mongoTemplate;
    @Override
    public Boolean save(UserInfo entity) {
        mongoTemplate.save(entity);
        return true;
    }

    @Override
    public Boolean update(UserInfo entity) {
        return null;
    }

    @Override
    public Boolean delete(Long id) {
        return null;
    }

    @Override
    public UserInfo getById(Long id) {
        return null;
    }

    @Override
    public List<UserInfo> listAll() {
        return mongoTemplate.findAll(UserInfo.class);
    }

    @Override
    public List<UserInfo> listAll(UserInfo entity) {
        return null;
    }
}

注意此处@Qualifier(“basicMongoTemplate”)中即为相应的具体实现类。

这里只写了添加和查询列表的实现,其他的查询相应的api即可

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserInfoServiceTest {
    @Autowired
    private UserInfoService userInfoService;
    @Test
    public void save() throws Exception {
        UserInfo userInfo = new UserInfo();
        userInfo.setAge(23);
        userInfo.setId(1000l);
        userInfo.setName("管理员");
        userInfo.setNickname("hehe");
        userInfo.setPassword("123456");
        userInfo.setUsername("admin");
        userInfoService.save(userInfo);
    }

    @Test
    public void listAll() throws Exception {
        userInfoService.listAll();
    }
}

若库不存在,会自动生成相应的库和文档 如图:

另一个order相关库的配置就不再这里写了,相应的请参考代码

github中lessons-5

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、mongo的介绍
  • 2、项目构建
  • 3、在application.properties中添加配置
  • 4、配置相应的数据源
  • 3.1)接下来第一个库的封装
    • 3.2)接下来第两个库的封装
    • 4、创建数据实体
    • 4、添加对实体的操作
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档