MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
最近花了一些时间学习了下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中属性
1 @Component 2 @PropertySource(value = "classpath:mongodb.properties") 3 public class MongoProperties { 4 5 @Value("${mongo.host}") 6 private String host; 7 8 @Value("${mongo.port}") 9 private Integer port; 10 11 @Value("${mongo.dbname}") 12 private String dbname; 13 14 @Value("${mongo.username}") 15 private String username; 16 17 @Value("${mongo.password}") 18 private String password; 19 20 @Value("${mongo.connectionsPerHost}") 21 private int connectionsPerHost; 22 23 @Value("${mongo.minConnectionsPerHost}") 24 private int minConnectionsPerHost; 25 26 @Value("${mongo.threadsAllowedToBlockForConnectionMultiplier}") 27 private int threadsAllowedToBlockForConnectionMultiplier; 28 29 @Value("${mongo.connectTimeout}") 30 private int connectTimeout; 31 32 @Value("${mongo.maxWaitTime}") 33 private int maxWaitTime; 34 35 @Value("${mongo.socketKeepAlive}") 36 private boolean socketKeepAlive; 37 38 @Value("${mongo.socketTimeout}") 39 private int socketTimeout; 40 41 // getter & setter 42 }
mongo.properties文件
1 mongo.host=10.10.13.195 2 mongo.port=27017 3 4 # 数据库和验证信息 5 mongo.dbname=test 6 mongo.username=xugf 7 mongo.password=123456 8 9 mongo.connectionsPerHost=8 10 mongo.minConnectionsPerHost=3 11 mongo.threadsAllowedToBlockForConnectionMultiplier=4 12 mongo.connectTimeout=1000 13 mongo.maxWaitTime=1500 14 mongo.socketKeepAlive=true 15 mongo.socketTimeout=1500
2、MongoConfiguration配置类
这个类用于配置MongoClient和DbFactory
我们参考下官方文档,https://github.com/spring-projects/spring-data-mongodb
1)配置类继承AbstractMongoConfiguration
2)使用@EnableMongoRepositories注解开启MongoRepsitory的扫描功能
看下这个类的代码
1 @EnableMongoRepositories(basePackages = "org.net5ijy.mongo.dao") 2 @Configuration 3 @ComponentScan(basePackages = { "org.net5ijy.mongo" }) 4 public class MongoConfiguration extends AbstractMongoConfiguration { 5 6 @Autowired 7 private MongoProperties mongoProperties; 8 9 public MongoClient mongoClient() throws Exception { 10 11 // 获取单机服务器环境 12 ServerAddress address = new ServerAddress(mongoProperties.getHost(), 13 mongoProperties.getPort()); 14 15 List<MongoCredential> credentialsList = new ArrayList<MongoCredential>(); 16 credentialsList.add(MongoCredential.createScramSha1Credential( 17 mongoProperties.getUsername(), mongoProperties.getDbname(), 18 mongoProperties.getPassword().toCharArray())); 19 20 Builder builder = MongoClientOptions.builder(); 21 22 builder.connectionsPerHost(mongoProperties.getConnectionsPerHost()); 23 builder.threadsAllowedToBlockForConnectionMultiplier(mongoProperties 24 .getThreadsAllowedToBlockForConnectionMultiplier()); 25 builder.connectTimeout(mongoProperties.getConnectTimeout()); 26 builder.maxWaitTime(mongoProperties.getMaxWaitTime()); 27 builder.socketKeepAlive(mongoProperties.isSocketKeepAlive()); 28 builder.socketTimeout(mongoProperties.getSocketTimeout()); 29 builder.minConnectionsPerHost(mongoProperties 30 .getMinConnectionsPerHost()); 31 32 return new MongoClient(address, credentialsList, builder.build()); 33 } 34 35 @Bean 36 public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 37 return new PropertySourcesPlaceholderConfigurer(); 38 } 39 40 @Override 41 protected String getDatabaseName() { 42 return mongoProperties.getDbname(); 43 } 44 45 @Override 46 public Mongo mongo() throws Exception { 47 return mongoClient(); 48 } 49 }
3、数据层接口
继承MongoRepository
1 public interface EmployeeDao extends MongoRepository<Employee, String> { 2 3 void deleteByName(String name); 4 5 Employee findByName(String name); 6 }
4、JUnit测试代码
1 @RunWith(SpringJUnit4ClassRunner.class) 2 @ContextConfiguration(classes = { MongoConfiguration.class }) 3 public class EmployeeDaoTest { 4 5 @Autowired 6 private EmployeeDao employeeDao; 7 8 @Autowired 9 private ConfigurableApplicationContext context; 10 11 @Test 12 public void testFindAll() throws Exception { 13 14 System.out.println("\n##### ApplicationContext class #####\n"); 15 16 System.out.println(context.getClass()); 17 18 System.out.println("\n##### Object names #####\n"); 19 20 String[] names = context.getBeanDefinitionNames(); 21 for (String name : names) { 22 System.out.println(name); 23 } 24 25 System.out.println("\n##### MongoDB employees #####\n"); 26 27 List<Employee> list = employeeDao.findAll(); 28 for (Employee employee : list) { 29 System.out.println(employee); 30 } 31 32 // Thread.sleep(10000); 33 34 context.close(); 35 } 36 37 @Test 38 public void testSave() { 39 Employee e = new Employee("admin", 28); 40 e.setSalary(4234.56); 41 employeeDao.save(e); 42 } 43 44 @Test 45 public void testDeleteByName() { 46 employeeDao.deleteByName("admin"); 47 } 48 49 @Test 50 public void testDelete() { 51 Employee e = employeeDao.findByName("admin"); 52 employeeDao.delete(e.getId()); 53 } 54 55 @Test 56 public void testFindByName() { 57 Employee e = employeeDao.findByName("admin"); 58 System.out.println(e); 59 } 60 61 @Test 62 public void testFindOne() { 63 Employee e = employeeDao.findByName("admin"); 64 Employee e2 = employeeDao.findOne(e.getId()); 65 System.out.println(e2); 66 } 67 }
View Code
和xml配置时编写的测试类区别不大,就是
@ContextConfiguration(classes = { MongoConfiguration.class })
这里有了变化
5、扩展:MongoDB添加用户
1 use admin 2 db.createUser({user: "admin", pwd: "123456", roles:[{role: "root", db: "admin" }]}) 3 4 use test 5 db.createUser({user: "xugf", pwd:"123456", roles:[{role:"dbOwner", db:"test"}]})
6、参考资料
Spring Data MongoDB
https://github.com/spring-projects/spring-data-mongodb
转载于:https://www.cnblogs.com/xugf/p/9772598.html
MongoDB和Java(5):Spring Data整合MongoDB(注解配置)相关推荐
- MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- dbref java_java – Spring Data REST MongoDB:检索DBRef的对...
你好专家@ stackOverflow, 我们正在使用Spring Data REST MongoDB. 是否有可能急于加载子对象,而不是使用@DBRef注释的超链接?请参阅下面的Process.te ...
- 使用Spring Data访问MongoDB数据库
本文将引导我们如何使用Spring Data MongoDB构建应用程序,并使用应用程序在MongoDB(基于文档的数据库)中存储数据与检索数据. 需要新建什么 我们要使用Spring Data Mo ...
- Springboot Could not resolve placeholder ‘spring.data.mongodb.database’ in value “${spring.data.mong
Springboot Could not resolve placeholder 'spring.data.mongodb.database' in value "${spring.data ...
- datav本地部署 java,Spring Boot对Spring Data JPA的自动配置
一 点睛 Spring Boot对Spring Data JPA的自动配置放置在如下路径: 二 源码分析 1 JpaRepositoriesAutoConfiguration类分析 @Configur ...
- Elasticsearch 实战1:ES 项目实战(一)Java 集成 Spring Data Elasticsearch(一):简介及环境搭建
一:前语 1.项目文档 CSDN 专栏:<Elasticsearch 入门和项目实战> 博客路径: https://blog.csdn.net/a767815662/category_91 ...
- Spring Data之MongoDB配置
一.重写基类扩展功能 package com.mk.mongodb.repository;import org.springframework.data.mongodb.core.MongoOpera ...
- Spring Data,MongoDB和JSF集成教程
示例应用程序简介(MongoShop产品目录) 在学习完本教程之后,将构建具有以下功能要求的示例应用程序(MongoShop产品目录): 1.搜索具有不同条件的产品(例如,sku,产品类型,标题,st ...
- Spring Boot整合MongoDB实现增删改查
MongoDB这两年来是本人一直使用较多的,之前的使用大多通过封装的工具类对数据库进行操作,虽然也算稳定,但有了Spring Boot之前的工具类直接加到SpringBoot里就没那么好使了,因此查阅 ...
最新文章
- 腾讯 Robotics X 实验室首次「开箱」移动机器人,能走梅花桩,还能自平衡
- 剑指 offer set 23 n 个骰子的点数
- Rstudio连接spark失败
- Leetcode402 remove-k-digits贪心+vector模拟栈的思想
- Netty 和 RPC 框架线程模型分析
- 深入理解支持向量机(SVM)
- loj#115. 无源汇有上下界可行流
- 促销海报灵感素材,不卖出去都难
- Android开发笔记(一百一十四)发布工具
- Solrflux源码分析-Sql Support within Solr-类Sql的solr搜索实现(2)
- 时间机器与iCloud云盘:应该使用哪个来备份你的Mac?
- Cgroups控制cpu,内存,io示例
- Python类常用的魔术方法
- Echarts横向的柱状图
- 服务器密闭通道天窗维修,机柜及密闭通道技术规范
- 用友数据库错误“未能读取并闩锁页(1:3355)(用闩锁类型SH)”修复
- python卡方拟合优度检验_如何理解拟合优度检验 ?
- swift调用api接口_如何在Swift中进行API调用
- [计算机网络】【网络设备】VTP
- LibPcap经常丢包怎么办?
热门文章
- 关于压缩工具 7z(7-zip) 的选项 -x(排除文件)的解读
- c语言明解课后答案,明解C语言 中级篇 第一章答案
- java获取文件夹 路径,Java获取文件的路径
- java人种_实在看不出藏族有大量矮黑血统
- python快速排序算法循环_算法:快速排序的Python实现
- C语言面试-指针和引用的使用场景?
- 最全的C++面试题来啦!(来自各大一线互联网)
- AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?
- android 活动销毁不了,即使活动已经销毁,AsyncTask也不会停止
- php重载,PHP 重载