作者:Hcl | 来源:互联网 | 2023-09-05 09:36
SpringBoot2开启mongodbSSL连接与连接池配置本文基于springboot2采用host方式配置mongodbip连接,官方也支持uri方式连接mongodb。2.
SpringBoot2开启mongodbSSL连接与连接池配置
本文基于springboot2采用host方式配置mongodb ip连接,官方也支持uri方式连接mongodb(mongodb://ip:端口/数据库名称)。
POM.xml配置
org.springframework.boot spring-boot-starter-parent 2.1.6.RELEASE org.springframework.boot spring-boot-starter-data-mongodb 在application.yml中配置mongodb信息
spring: data: mongodb: #uri: mongodb://ip:端口/数据库名称 host: 127.0.0.1 username: root password: password port: 27071 database: 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连接配置类@Configurationpublic class MongoSSL { @Bean public 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
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); }} 如有不足之处欢迎指正,转载请注明出处!