SpringBoot2开启mongodbSSL连接与连接池配置

本文基于springboot2采用host方式配置mongodb ip连接,官方也支持uri方式连接mongodb(mongodb://ip:端口/数据库名称)。
POM.xml配置

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.6.RELEASE</version>
</parent>
<dependencies>
<!--mongodb--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
</dependencies>

在application.yml中配置mongodb信息

spring:data:mongodb:#uri: mongodb://ip:端口/数据库名称host: 127.0.0.1username: rootpassword: passwordport: 27071database: test //配置使用哪个数据库authentication-database: admin

配置详解:
1.host为mongodb的ip,在副本集的mongodb中推荐配置为primary的ip,单节点mongodb直接配置ip即可。

2.authentication-database为连接mongodb时使用哪个数据库作为登录鉴权数据库,需要注意自己创建的用户属于哪个mongodb数据库。

3.mongodb基本配置类为MongoProperties.java,可自行查看。
至此springboot就可以连接mongodb了,直接注入MongoTemplate对象就可以操作

mongodb开启SSL连接
MongoClientOptions.java中有关于SSL连接,心跳检测,连接池,是否启用短链接,链接时间管理等更多详细配置项。
如果使用自己搭建的mongdb需要使用openssl制作证书并配置可参考:MongoDB使用SSL
mongoDB官方文档
公司项目使用的是云数据库,开启SSL连接后可下载客户端证书,在需要创建新的证书信赖库时需要使用 keytool -importcert -trustcacerts -file 需要导入的证书文件路径 -keystore 证书信赖库地址 -storepass 证书信赖库密码 ,此命令将证书加入新创建的java证书库中。非交互式:在命令最后加参数-noprompt

如果需要将证书加入已存在的信赖库中使用如下命令:keytool -export -alias 别名 -keystore 信赖库位置/XX.jks -storepass 秘钥库密码 -file 需导入的证书

在程序中设置JVM 系统属性以指向正确的信任库和密钥库。
System.setProperty(“javax.net.ssl.trustStore”,“证书路径/XX.JKS”);
System.setProperty(“javax.net.ssl.trustStorePassword”,“XXX”);
SSL配置代码如下:

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Collections;
import java.util.List;//mongoSSl连接配置类
@Configuration
public class MongoSSL {@Beanpublic MongoClient createNetworkMongoClient(MongoProperties properties) {//properties 对象为springboot创建,可直接用MongoCredential credentials = getCredentials(properties);String host = properties.getHost() == null ? "localhost" : properties.getHost();int port = properties.getPort() == null ? 27017 : properties.getPort();List<ServerAddress> addrs = Collections.singletonList(new ServerAddress(host, port));System.setProperty("javax.net.ssl.trustStore","证书路径");System.setProperty("javax.net.ssl.trustStorePassword","密钥库密码");MongoClientOptions options = MongoClientOptions.builder().sslEnabled(true) //开启SSL连接.sslInvalidHostNameAllowed(true) //不检查证书域名.minConnectionsPerHost(1) //连接池最小连接数,最大连接数默认为100.build();return new MongoClient(addrs, credentials, options);}private MongoCredential getCredentials(MongoProperties properties) {String username = properties.getUsername();String database = properties.getAuthenticationDatabase() == null? properties.getMongoClientDatabase(): properties.getAuthenticationDatabase();//此处可将加密的密码解密,替换配置文件中的值properties.setPassword(new String(properties.getPassword()).toCharArray());char[] password = properties.getPassword();return MongoCredential.createCredential(username, database, password);}
}

如有不足之处欢迎指正,转载请注明出处!

SpringBoot2开启mongodbSSL连接与连接池配置相关推荐

  1. SpringBoot2/SpringBoot/Java动态数据源配置、动态连接池配置、多数据源负载均衡

    Java动态数据源配置.动态连接池配置.多数据源负载均衡 大家好,今天给大家推荐一个自产的连接池插件.废话不多说,本文接口分为以下主题: 1. 插件开发背景: 2. 插件提供的能力: 3. 插件的使用 ...

  2. mybatis开启log_mybatis使用spring-druid数据源连接池配置log4j打印sql语句以及开启监控平台...

    杂七杂的杂 作为程序员,开发工程中,一套利于测试或者监控的工具很重要,mybatis默认没有提供log4j的打印sql语句的配置. 这对于开发rest服务,提供接口的开发者而言,是在很不好做,再加上m ...

  3. 【超详细】DBCP连接池配置参数说明

    <!-- 数据源1 --><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSo ...

  4. Spring+Hibernate+c3p0连接池配置-连接无法释放的问题解决方案

     1.Spring+Hibernate+c3p0连接池配置: <?xml version="1.0" encoding="UTF-8"?> < ...

  5. HikariCP连接池配置

    2019独角兽企业重金招聘Python工程师标准>>> HikariCP号称性能最好的Java数据库连接池.虽没做过亲测但是公司项目一直在用,大概经历过2万左右用户同时在线,链接池性 ...

  6. spring mysql 连接池配置_SpringBoot数据库连接池常用配置

    关注公众号:程序猿王国         持续更新,每日分享 在配置文件中添加配置如下(我使用的是多数据源): spring.datasource.primary.url=jdbc\:mysql\:// ...

  7. redis专题:redis键值设计、性能优化以及redis连接池配置

    文章目录 1.redis键值设计 ①:key设计规范 ②:value设计规范 2. 命令使用优化 3. redis连接池配置参数设计 4. redis连接池预热 5. redis的key过期删除策略 ...

  8. DBCP,C3P0,druid,HiKariCP连接池配置使用

    Apache DBCP连接池配置 Apache commons-dbcp 需要导入dbcp包和 pool包 ,可以 从spring-framework-3.0.2.RELEASE-dependenci ...

  9. springboot2整合redis使用lettuce连接池(解决lettuce连接池无效问题)

    lettuce客户端 Lettuce 和 Jedis 的都是连接Redis Server的客户端程序.Jedis在实现上是直连redis server,多线程环境下非线程安全(即多个线程对一个连接实例 ...

最新文章

  1. 二叉树-路径总和(递归)
  2. javascript的promise
  3. python编写函数求斐波那契数列的某一项_求解一道Python编程题
  4. Django上传文件及分页
  5. 计算机基础知识--编码知识
  6. 数据结构练习——双向链表
  7. 腾讯音乐计划以介绍形式在港交所主板二次上市
  8. mysql日志输出到syslog_在chroot环境下将MySQL日志输出到syslog
  9. Java 换行和回车
  10. F8-Nginx代理缓存负载均衡后端均衡
  11. python eval函数简单使用
  12. Flutter AppBar控件
  13. OpenModelica模型导入Simulink运行的方法
  14. 怎样运用好iMindMap中的虚线箭头
  15. C#中的bin和obj文件夹有什么用?
  16. day4-数字类型和列表基础
  17. cp: omitting directory `XXX'问题解决
  18. 复信号与信号的I/Q值
  19. 今天看生财英文工具站航海中阿彪的分享,里面有几点可以分享下
  20. 笔记本外接显示器感觉鼠标有延迟解决办法

热门文章

  1. 资源的释放方式try-catch-finally, try-catch-resource
  2. python 微服务 网关_建设微服务API网关的一些实践
  3. 基于MS的Forcite模块模拟氢在钨表面的物理吸附
  4. gradle第三方Jar包依赖统一管理
  5. 线性数据结构的实现与应用_双端队列_逆波兰式_呼叫中心_XAUAT_(原问题自杜克大学Duke University cps110 C++ Stacks and Queues and Lists)
  6. python创建socket对象_python socket对象内建方法
  7. 【半导体产业链全景图】发布!
  8. 写笔记插件_我的笔记系统
  9. 算法设计与分析--汽车牌照的快速查…
  10. Petri网pnml解析成关联矩阵后生成可达图