最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装、客户端操作、安全认证、副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很大。特此记录,以备查看。

文章目录:

MongoDB和Java(1):Linux下的MongoDB安装

MongoDB和Java(2):普通用户启动mongod进程

MongoDB和Java(3):Java操作MongoB

MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

MongoDB和Java(5):Spring Data整合MongoDB(注解配置)

MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群

MongoDB和Java(7):MongoDB用户管理

本文记录如何使用注解配置方式整合Spring data和MongoDB,基础的环境和使用xml整合是一样的,不同的是:

1)删除spring的xml配置文件

2)不再编写数据层的实现,而是使用Spring Data Mongodb扫描创建代理实现

源代码下载
MongoDB和Java学习代码.zip

1、MongoProperties类

这个类用于读取mongo.properties中属性

 @Component
@PropertySource(value = "classpath:mongodb.properties")
public class MongoProperties { @Value("${mongo.host}")
private String host; @Value("${mongo.port}")
private Integer port; @Value("${mongo.dbname}")
private String dbname; @Value("${mongo.username}")
private String username; @Value("${mongo.password}")
private String password; @Value("${mongo.connectionsPerHost}")
private int connectionsPerHost; @Value("${mongo.minConnectionsPerHost}")
private int minConnectionsPerHost; @Value("${mongo.threadsAllowedToBlockForConnectionMultiplier}")
private int threadsAllowedToBlockForConnectionMultiplier; @Value("${mongo.connectTimeout}")
private int connectTimeout; @Value("${mongo.maxWaitTime}")
private int maxWaitTime; @Value("${mongo.socketKeepAlive}")
private boolean socketKeepAlive; @Value("${mongo.socketTimeout}")
private int socketTimeout; // getter & setter
}

mongo.properties文件

 mongo.host=10.10.13.195
mongo.port=27017 # 数据库和验证信息
mongo.dbname=test
mongo.username=xugf
mongo.password=123456 mongo.connectionsPerHost=8
mongo.minConnectionsPerHost=3
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.socketKeepAlive=true
mongo.socketTimeout=1500

2、MongoConfiguration配置类

这个类用于配置MongoClient和DbFactory

我们参考下官方文档,https://github.com/spring-projects/spring-data-mongodb

1)配置类继承AbstractMongoConfiguration

2)使用@EnableMongoRepositories注解开启MongoRepsitory的扫描功能

看下这个类的代码

 @EnableMongoRepositories(basePackages = "org.net5ijy.mongo.dao")
@Configuration
@ComponentScan(basePackages = { "org.net5ijy.mongo" })
public class MongoConfiguration extends AbstractMongoConfiguration { @Autowired
private MongoProperties mongoProperties; public MongoClient mongoClient() throws Exception { // 获取单机服务器环境
ServerAddress address = new ServerAddress(mongoProperties.getHost(),
mongoProperties.getPort()); List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();
credentialsList.add(MongoCredential.createScramSha1Credential(
mongoProperties.getUsername(), mongoProperties.getDbname(),
mongoProperties.getPassword().toCharArray())); Builder builder = MongoClientOptions.builder(); builder.connectionsPerHost(mongoProperties.getConnectionsPerHost());
builder.threadsAllowedToBlockForConnectionMultiplier(mongoProperties
.getThreadsAllowedToBlockForConnectionMultiplier());
builder.connectTimeout(mongoProperties.getConnectTimeout());
builder.maxWaitTime(mongoProperties.getMaxWaitTime());
builder.socketKeepAlive(mongoProperties.isSocketKeepAlive());
builder.socketTimeout(mongoProperties.getSocketTimeout());
builder.minConnectionsPerHost(mongoProperties
.getMinConnectionsPerHost()); return new MongoClient(address, credentialsList, builder.build());
} @Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
} @Override
protected String getDatabaseName() {
return mongoProperties.getDbname();
} @Override
public Mongo mongo() throws Exception {
return mongoClient();
}
}

3、数据层接口

继承MongoRepository

 public interface EmployeeDao extends MongoRepository<Employee, String> {

     void deleteByName(String name);

     Employee findByName(String name);
}

4、JUnit测试代码

 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { MongoConfiguration.class })
public class EmployeeDaoTest { @Autowired
private EmployeeDao employeeDao; @Autowired
private ConfigurableApplicationContext context; @Test
public void testFindAll() throws Exception { System.out.println("\n##### ApplicationContext class #####\n"); System.out.println(context.getClass()); System.out.println("\n##### Object names #####\n"); String[] names = context.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
} System.out.println("\n##### MongoDB employees #####\n"); List<Employee> list = employeeDao.findAll();
for (Employee employee : list) {
System.out.println(employee);
} // Thread.sleep(10000); context.close();
} @Test
public void testSave() {
Employee e = new Employee("admin", 28);
e.setSalary(4234.56);
employeeDao.save(e);
} @Test
public void testDeleteByName() {
employeeDao.deleteByName("admin");
} @Test
public void testDelete() {
Employee e = employeeDao.findByName("admin");
employeeDao.delete(e.getId());
} @Test
public void testFindByName() {
Employee e = employeeDao.findByName("admin");
System.out.println(e);
} @Test
public void testFindOne() {
Employee e = employeeDao.findByName("admin");
Employee e2 = employeeDao.findOne(e.getId());
System.out.println(e2);
}
}

和xml配置时编写的测试类区别不大,就是

@ContextConfiguration(classes = { MongoConfiguration.class })

这里有了变化

5、扩展:MongoDB添加用户

 use admin
db.createUser({user: "admin", pwd: "", roles:[{role: "root", db: "admin" }]}) use test
db.createUser({user: "xugf", pwd:"", roles:[{role:"dbOwner", db:"test"}]})

6、参考资料

Spring Data MongoDB
https://github.com/spring-projects/spring-data-mongodb

MongoDB和Java(5):Spring Data整合MongoDB(注解配置)的更多相关文章

  1. MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  2. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  3. MongoDB和Java(7):MongoDB用户管理

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  4. spring MVC 整合mongodb

    Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码 ...

  5. 使用 Spring Data 进行 MongoDB 4.0 事务处理

    使用 Spring Data 进行 MongoDB 4.0 事务处理 原文链接:http://spring.io/blog/2018/06/28/hands-on-mongodb-4-0-transa ...

  6. 【Spring Data 系列学习】Spring Data JPA @Query 注解查询

    [Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...

  7. (转)java之Spring(IOC)注解装配Bean详解

    java之Spring(IOC)注解装配Bean详解   在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看 ...

  8. JAVA 处理 Spring data mongodb 时区问题

    Spring data mongodb 查询出结果的时候会自动 + 8小时,所以我们看起来结果是对的 但是我们查询的时候,并不会自动 + 8小时,需要自己处理 解决方法 1   @JsonFormat ...

  9. spring+springMVC 整合 MongoDB 实现注册登录

    发现一入手 MongoDB,便无法脱离,简要说一下,MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 也是在 Nosql 中我最喜欢的一种 ...

随机推荐

  1. Vs2017添加.NET Standard项目出现黄色未引用的SDK

    项目打开文件夹位置,按住shift键,执行dotnet restore命令

  2. XMLHttpRequest用法介绍

    前言: 传统的Web应用请求服务器返回的一般是是完整的HTML页面,这样往往就需要页面进行刷新操作,不仅耗时而且用户体验度也不好.最典型的代表就是form表单登录操作了.如果登录失败往往是跳转到原网页 ...

  3. mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法

    SET max_length_for_sort_data = 1024 SHOW VARIABLES LIKE '%max_length_for_sort_data%'; 查询:SELECT * FR ...

  4. tensorflow 预训练模型列表

    tensorflow 预训练模型列表 https://github.com/tensorflow/models/tree/master/research/slim Pre-trained Models ...

  5. Alpine容器中运行go的二进制文件

    Alpine容器中运行go的二进制文件 kuSorZ · 3月之前 · 214 次点击 · 预计阅读时间 1 分钟 · 2分钟之前 开始浏览 原文出处:https://cloud.tencent.co ...

  6. vue重置表单数据

    Object.assign(this.$data, this.$options.data()) // 全部重置 Object.assign(this.$data.form, this.$options ...

  7. Spring 内部机制 Spring AOP

    https://my.oschina.net/zhangxufeng/blog/2219005 Spring Bean注册解析(一)和Spring Bean注册解析(二) 彻底征服 Spring AO ...

  8. Executors创建四种线程池

    newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixedThreadPool 创建一个定长线程池,可控制线程 ...

  9. springboot 80转443

    application.yml 中配置https证书信息 向spring容器中注入两个Bean,代码如下 import java.util.Map; import org.apache.catalin ...

  10. Python的网页解析库-PyQuery

    PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严 ...