MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装、客户端操作、安全认证、副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很大。特此记录,以备查看。
文章目录:
MongoDB和Java(1):Linux下的MongoDB安装
MongoDB和Java(2):普通用户启动mongod进程
MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
MongoDB和Java(6):Spring Data整合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(注解配置)的更多相关文章
- MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- MongoDB和Java(7):MongoDB用户管理
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- 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代码 ...
- 使用 Spring Data 进行 MongoDB 4.0 事务处理
使用 Spring Data 进行 MongoDB 4.0 事务处理 原文链接:http://spring.io/blog/2018/06/28/hands-on-mongodb-4-0-transa ...
- 【Spring Data 系列学习】Spring Data JPA @Query 注解查询
[Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...
- (转)java之Spring(IOC)注解装配Bean详解
java之Spring(IOC)注解装配Bean详解 在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看 ...
- JAVA 处理 Spring data mongodb 时区问题
Spring data mongodb 查询出结果的时候会自动 + 8小时,所以我们看起来结果是对的 但是我们查询的时候,并不会自动 + 8小时,需要自己处理 解决方法 1 @JsonFormat ...
- spring+springMVC 整合 MongoDB 实现注册登录
发现一入手 MongoDB,便无法脱离,简要说一下,MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 也是在 Nosql 中我最喜欢的一种 ...
随机推荐
- No Suitable Driver Found For Jdbc
今天出现编码出现了No suitable driver found for jdbc,又是找遍了网上的资料,基本上都说是三个问题: 一是:连接URL格式出现了问题(Connection conn ...
- JPA的查询方法总结
一.使用where条件上一篇我们使用JPA进行了数据源的访问,默认JPA已经实现了好几个接口可以调用.但是,在实际的业务中,查询语句不可避免地需要使用where.order by等语句. 我们用商品数 ...
- buddo源码分析-transport组件之Netty(一)
dubbo 2.5.10 版本,netty仍然使用的是netty的3.10.5版本,我们从下面的代码可以看出,SPI默认使用的是“netty”,而不是“netty4”. package com.ali ...
- C#利用iTextSharp将datatable数据转化为PDF文件
1.下载iTextSharp.dll文件 下载链接:https://pan.baidu.com/s/14o-pJ-U2yU8n0EyIn249qg 提取码:tklu 2.PDF转换方法 /// < ...
- sumdoc t411 dir.txt
C:\Users\zhoufeiyue\Documents\sumdoc t411\(9+条消息)redis Jedis存取list对象和map - shenjianxz的博客 - CSDN博客.mh ...
- 如何在nginx下实现访问web网站密码认证保护的功能
在某些特定的环境下,我们希望nginx下的web站点在访问时需要用户输入账户密码才能访问.以便拒绝那些不速之客. 其实,配置起来也很简单,按照下面的步骤即可实现. 一.编辑虚拟主机配置文件. serv ...
- cp复制
将Data文件复制到B目录下: cp -r /home/hp/Data /home/hp/B/
- CentOS7下安装Nexus私服及基础配置
环境准备 VMware上安装CentOS7 XShell/Xftp NexusOSS-3.10 jdk1.8 安装 使用root用户登录,将安装包均放置在/usr/local文件夹下 使用Xshell ...
- Bladex之Arhcer代码生成器
代码生成器配置: 数据库表准备:Archer中增加对应的表:(参照test_notice和test_notice_list表)主表:SET FOREIGN_KEY_CHECKS=0; -- ----- ...
- LeetCode_485. Max Consecutive Ones
485. Max Consecutive Ones Easy Given a binary array, find the maximum number of consecutive 1s in th ...