如何使用Springboot连接MongoDB数据库(连接多数据库),以及设置SSL

业务需求,需要能连接配置了ssl连接的mongoDB。
话不多说先连接数据库吧!
本文只介绍基于Springboot中MongoTemplate的使用。
使用前需要创建Springboot的基本工程哦,这部分就不介绍啦。

首先pom文件的引用:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

接下来就是两种方式来使用MongoTemplate了。

第一种使用配置文件配置数据源,使用默认的MongoTemplate

配置yml文件(如果是别的类型的配置文件也可以只不过格式不同而已):

spring:
  data:
    mongodb:
      host: 192.168.1.191
      port: 27017
      database: test
      authentication-database: admin
      username: user
      password: 123456

大功告成!配置完了,直接使用就行了。
接下来测试一下吧!

创建一个entity

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;

@Document(collection = "demo_collection")  //表名
public class DemoEntity implements Serializable {
    @Id //绑定每个表中的_id字段
    private Long id;

    private String title;

    private String description;

    private String by;

    private String url;

    private String corn;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getBy() {
        return by;
    }

    public void setBy(String by) {
        this.by = by;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }


    public String getCorn() {
        return corn;
    }

    public void setCorn(String corn) {
        this.corn = corn;
    }
}

创建DAO层接口

public interface DemoDao {
    void saveDemo(DemoEntity demoEntity);

    void removeDemoById(Long id);

    void updateDemo(DemoEntity demoEntity);

    DemoEntity findDemoById(Long id);

    List<DemoEntity> findDemos();
}
@Repository
public class DemoDaoImpl1 implements DemoDao {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public void saveDemo(DemoEntity demoEntity) {
        mongoTemplate.save(demoEntity);
    }

    @Override
    public void removeDemoById(Long id) {
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplate.findAllAndRemove(query,DemoEntity.class);
    }

    @Override
    public void updateDemo(DemoEntity demoEntity) {
        Query query = new Query(Criteria.where("id").is(demoEntity.getId()));

        Update update = new Update();
        update.set("title", demoEntity.getTitle());
        update.set("description", demoEntity.getDescription());
        update.set("by", demoEntity.getBy());
        update.set("url", demoEntity.getUrl());
        update.set("corn", demoEntity.getCorn());

        mongoTemplate.updateFirst(query, update, DemoEntity.class);
    }

    @Override
    public DemoEntity findDemoById(Long id) {
        Query query = new Query(Criteria.where("id").is(id));
        DemoEntity demoEntity = mongoTemplate.findOne(query, DemoEntity.class);
        return demoEntity;
    }

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

很简单吧!直接使用就可以,用Query 可以执行一些特殊的筛选操作。以上测试没有问题哦,直接可以用,如果不好用那就排查本地环境吧。

第二种多数据源配置

首先我们需要多数据源的基本配置信息,本文我介绍的是同一个数据库URL中创建的多个database的操作。

yml配置文件:

mongodb:
  url: mongodb://user:123456@192.168.1.191:27017/
  database:
    test: test
    test1: test1

如果需要连个多个url也是可以的只要多配置几个url就可以了。
我们还是使用上面创建的entity。

首先创建@Bean:

@Configuration
public class MongoDBConfig {

    @Value("${mongodb.url}")
    private String mongoUrl;

    @Value("${mongodb.database.test}")
    private String test;

    @Value("${mongodb.database.test1}")
    private String test1;

    @Primary
    @Bean
    public  MongoTemplate mongoTemplate() {
        return new MongoTemplate(
                new SimpleMongoClientDatabaseFactory(MongoClients.create(mongoUrl), test));
    }

    @Bean(name = "TemplateTest")//数据源1的database使用test
    public  MongoTemplate mongoTemplateTest() {
        return new MongoTemplate(
                new SimpleMongoClientDatabaseFactory(MongoClients.create(mongoUrl), test));
    }

    @Bean(name = "TemplateTest1")//数据源2的database使用test1
    public MongoTemplate mongoTemplateTest1() {
        return new MongoTemplate(
                new SimpleMongoClientDatabaseFactory(MongoClients.create(mongoUrl), test1));
    }
    // 开启事务
    @Bean
    MongoTransactionManager transactionManager(MongoDatabaseFactory factory){
        return new MongoTransactionManager(factory);
    }
}

接下来,使用:

@Repository
public class DemoDaoImpl implements DemoDao {

    @Autowired
    @Qualifier("TemplateTest")
    private MongoTemplate mongoTemplateTest;

    @Autowired
    @Qualifier("TemplateTest1")
    private MongoTemplate mongoTemplateTest1;

    @Override
    public void saveDemo(DemoEntity demoEntity) {
        mongoTemplateTest1.save(demoEntity);
    }

    @Override
    public void removeDemoById(Long id) {
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplateTest.findAllAndRemove(query,DemoEntity.class);
    }

    @Override
    public void updateDemo(DemoEntity demoEntity) {
        Query query = new Query(Criteria.where("id").is(demoEntity.getId()));

        Update update = new Update();
        update.set("title", demoEntity.getTitle());
        update.set("description", demoEntity.getDescription());
        update.set("by", demoEntity.getBy());
        update.set("url", demoEntity.getUrl());
        update.set("corn", demoEntity.getCorn());

        mongoTemplateTest.updateFirst(query, update, DemoEntity.class);
    }

    @Override
    public DemoEntity findDemoById(Long id) {
        Query query = new Query(Criteria.where("id").is(id));
        DemoEntity demoEntity = mongoTemplateTest.findOne(query, DemoEntity.class);
        return demoEntity;
    }

    @Override
    public List<DemoEntity> findDemos() {
        return mongoTemplateTest.findAll(DemoEntity.class);
    }
}

创建的Bean就是对应的数据库,如果使用多个URL那就多配置URL然后设置上就好了,很简单的。

接下来就是SSL的设置了
只要在能初始化跑过的地方加上以下代码

  		String pass = "changeit";
        System.setProperty("javax.net.ssl.trustStore", "D:\\source\\test\\sichuanAlarm\\src\\main\\resources\\rootCert");
        System.setProperty("javax.net.ssl.trustStorePassword", pass);

pass 是证书的密码,使用openssl创建证书的时候用的密码相同。
rootCert就是证书路径啦!
完美解决。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐