最近花了一些时间学习了下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. kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里)

    阿里太注重原理了:阿里问kafka如何实现高并发存储-如何找到一条需要消费的数据,kafka用了稀疏索引的方式,使用了二分查找法,其实很多索引都是二分查找法  二分查找法的时间复杂度:O(logn) ...

  2. 如何去掉word中英文单词下的红色波浪线

    文件  ->选项 ->校对 在 只隐藏此文档中的拼写错误(S) 选项前打钩,点击确定即可

  3. Out of range value for column 'field_length'

    往mysql数据库中插入数据是报错: Out of range value for column 'field_length' 字段类型是tinyint(4) 一开始以为是长度太小造成的,改成tiny ...

  4. Object changed by Unknown

    https://documentation.red-gate.com/soc7/troubleshooting/object-changed-by-unknown https://documentat ...

  5. CSS Blur() 将高斯模糊应用于输出图片

    一.Css  Blur() blur() CSS 方法将高斯模糊应用于输出图片. 结果为 <filter-function>. blur(radius) radius模糊的半径,值为< ...

  6. [Web] HTML5新特性history pushState/replaceState解决浏览器刷新缓存

    转载: https://www.jianshu.com/p/cf63a1fabc86 现实开发中,例如‘商品列表页’跳转‘商品详情页’,返回时,不重新加载刷新页面,并且滚动到原来的位置. 1.首先,先 ...

  7. CentOS7下NFS服务安装及配置固定端口

    CentOS7下NFS服务安装及配置 系统环境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64 软件版本:nfs-utils-1. ...

  8. Could not find com.android.tools.build:gradle:3.3.0.

    导入新项目时报错: Error:Could not find com.android.tools.build:gradle:3.3.0. Searched in the following locat ...

  9. sql server 利用存储过程http请求调用URL链接访问方法

    sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO EXEC sp_configure 'Ole Automatio ...

  10. SonarQube + Jenkins代码审查环境安装文档 v1.2

    1. 安装SonarQube 1.1. 下载 下载地址:https://www.sonarqube.org/downloads/ 本次使用安装包为:sonarqube-7.4.zip 需要提前准备jd ...