最近花了一些时间学习了下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. 从编程哲学到开发应用:Spring的初步应用

    一.前言 在学习Spring的过程中,我们学习了很多东西,可是实际应用中,我们究竟用到了那些?常用的又是那种方法呢? 二.书上与开发的差异 1.IOC 1) IOC,控制反转,是Spring框架的核心 ...

  2. 第1001次安kali

    第1001次安kali 由于VMware跟win10有仇等原因,最终投入了VirtualBox的怀抱 主要参考这个博客Kali Linux安装教程--VirtualBox 参考Kali安装教程(Vir ...

  3. 【Gamma】 Scrum Meeting 1

    github 本此会议项目由PM召开,召开时间为5月26日晚上10点 召开时长20分钟 任务表格 姓名 当前任务 下阶段任务 袁勤 后端插入判断题 后端插入简答题 彭一夫 填空题答题前端 判断题答题前 ...

  4. Spring Boot-Error:(3, 32) java: 程序包org.springframework.boot不存在

    问题分析 -由于加载的项目没有加载相应的依赖的包文件导致 解决方案 setting 选中图中的设置,点击apply,IDE就会自动下载所需要的包文件

  5. -[UITableView copyWithZone:]: unrecognized selector sent to instance 0x7XXXXXX00

    -[UITableView copyWithZone:]: unrecognized selector sent to instance 0x7XXXXXX00 -[Class copyWithZon ...

  6. QC9.2登陆时显示一个X号

    这个是因为浏览器安全设置的问题,具体解决步骤如下: 进入“工具-Internet选项”设置窗口,进入“高级”选项卡,将“安全”设置中的“启用内存保护减少联机攻击”选项的勾选去掉,然后应用并确定.重启浏 ...

  7. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器web前端:vue组件之间的传值,父组件向子组件传值

    前端方面,EasyDSS流媒体服务器与EasyNVR有着根本的不同.EasyNVR使用的是传统的js来进行开发,而EasyDSS使用的是webpack+vue来进行开发的,了解vue+webpack的 ...

  8. mybatis plus 支持达梦DM 数据库啦

    最近由于公司项目需要使用DM数据库,现在就官方源码修改了,完美支持达梦数据库的代码生成器.官方说的v3.0.RELEASE版本支持达梦数据库,不知道说的支持包括支持代码生成器么? 怀着兴奋的心情,兴高 ...

  9. [分享会] 微服务框架设计 (基于Swoole)

    框架三要素 1. Service 通信 2. 服务管理 3. 开发组件   为什么需要服务 1.自治性 2.可组合 3.异构性 2.弹性扩展   -实现方式-   共享库 1.二进制文件/Compos ...

  10. json_encode不自动转义斜杠“/”的方法

    默认的情况之下使用 json_encode 对数组进行 json 格式的转换时候会自动的将数据中含有斜杠的字符串进行转义,如图 两种解决办法   其一,正则替换: $a = str_replace(& ...