专栏首页猿天地spring data mongodb 代码连接数据库方式

spring data mongodb 代码连接数据库方式

平时我们用spring data mongodb都是采用xml配置的方式来链接数据库

但是往往有的时候需要用代码的方式来实现。

比如说我们有可能要同时操作多个db的数据,总不能一个db配置一个DbFactory吧。

这个时候就需要代码来动态创建和获取了。

下面贴上实现的代码,里面的参数都写死了,大家在做封装的时候可以作为参数传进去获取配置文件也行。

@Configuration
public class AppConfig { 
public @Bean MongoDbFactory mongoDbFactory() throws Exception {
 //mongodb地址,集群环境填多个
 List<ServerAddress> seeds = Arrays.asList(new ServerAddress("localhost", 27017));

//用户认证信息,参数为用户,数据库,密码
//MongoCredential com.mongodb.MongoCredential.createCredential(String userName, String database, char[] password)
    
MongoCredential mongoCredential = MongoCredential.createCredential("cxytiandi", "cxytiandi", "cxytiandi".toCharArray());
        
List<MongoCredential> credentialsList = Arrays.asList(mongoCredential);

//连接池参数配置
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        
// 每个主机的连接数
int connPerHost = 20;
builder.connectionsPerHost(connPerHost);
        
// 线程队列数
int threadCount = 20;
builder.threadsAllowedToBlockForConnectionMultiplier(threadCount);
        
// 最大等待连接的线程阻塞时间(单位:毫秒)
int maxWaitTime = 1000;
builder.maxWaitTime(maxWaitTime);
        
// 连接超时的时间。0是默认和无限(单位:毫秒)
int timeOut = 1000;
builder.connectTimeout(timeOut);

MongoClientOptions options = builder.build();

MongoClient mongoClient = new MongoClient(seeds, credentialsList, options);
//这里第二个参数也就是cxytiandi是用户认证的库名,在哪个库认证就表示登陆哪个库
return new SimpleMongoDbFactory(mongoClient, "cxytiandi");
}

public @Bean MongoTemplate mongoTemplate() throws Exception {
  return new MongoTemplate(mongoDbFactory());
}
public static void main(String[] args) throws Exception {
  AppConfig appConfig = new AppConfig();
  MongoTemplate mongoTemplate = appConfig.mongoTemplate();
  mongoTemplate.getCollectionNames().forEach(System.out::println);
}

}

本文分享自微信公众号 - 猿天地(cxytiandi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面试:Semaphore(信号量)的成长之路

    就3月份了,所谓的金三银四招聘季。2019年也许是互联网最冷清的一年,很多知名的大型互联网公司都裁员过冬。当然也有一些公司还在持续招人的,比如阿里就宣称不裁员,...

    猿天地
  • Java 调试工具、热部署、JVM 监控工具都用到了它

    我们平时写 Java Agent 的机会确实不多,也可以说几乎用不着。但其实我们一直在用它,而且接触的机会非常多。下面这些技术都使用了 Java Agent 技...

    猿天地
  • Elastic-Job动态添加任务

    背景 在使用Elastic-Job的过程中,有很多人遇到了这么一个问题,就是如何动态的去添加任务? 在官方的文档中也有对此作出回答,如下: 动态添加作业这个概念...

    猿天地
  • RocketMQ消息轨迹【源码笔记】

    在一个集群中可以配置一台机器专门负责消息轨迹的收集工作,该台机器上配置traceTopicEnable = true,borker启动的时候自动创建默认轨迹to...

    瓜农老梁
  • Android获取外部和内部存储空间总大小和可用大小 博客分类: Android小技巧 AndroidLinuxOSCache

          android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空...

    chroya
  • Java HTTP Host 头攻击原理以及如何防御

    很对微信群里的网友,我都称他们为老铁,从来不称兄道弟的,因为我觉得不真实。不向某东,说一套做一套。

    业余草
  • Qt学习——分割窗口QSplitter类 .

    1.建立项目时基类选择QMainWindow,取消Gernerate form复选框的选中状态。

    bear_fish
  • PostgreSQL WAL 再深入 base on pg 11

    WAL 机制 write ahead log ,在 PG 中是很重要的,关于数据库的安全和性能都会和 WAL 有牵扯。

    AustinDatabases
  • 你所不知道的Python | 字符串格式化的演进之路

    字符串格式化对于每个语言来说都是一个非常基础和常用的功能,学习Python的同学大概都知道可以用%语法来格式化字符串。然而为了让我们更方便的使用这个常用功能,语...

    simpleapples
  • vue源码解读--Vitual DOM(虚拟DOM)

    Virtual DOM产生的原因是浏览器中DOM是很“昂贵”的,我们来看一下一个p元素的属性都有哪些:

    用户3258338

扫码关注云+社区

领取腾讯云代金券