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 中我最喜欢的一种 ...
随机推荐
- kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里)
阿里太注重原理了:阿里问kafka如何实现高并发存储-如何找到一条需要消费的数据,kafka用了稀疏索引的方式,使用了二分查找法,其实很多索引都是二分查找法 二分查找法的时间复杂度:O(logn) ...
- 如何去掉word中英文单词下的红色波浪线
文件 ->选项 ->校对 在 只隐藏此文档中的拼写错误(S) 选项前打钩,点击确定即可
- Out of range value for column 'field_length'
往mysql数据库中插入数据是报错: Out of range value for column 'field_length' 字段类型是tinyint(4) 一开始以为是长度太小造成的,改成tiny ...
- Object changed by Unknown
https://documentation.red-gate.com/soc7/troubleshooting/object-changed-by-unknown https://documentat ...
- CSS Blur() 将高斯模糊应用于输出图片
一.Css Blur() blur() CSS 方法将高斯模糊应用于输出图片. 结果为 <filter-function>. blur(radius) radius模糊的半径,值为< ...
- [Web] HTML5新特性history pushState/replaceState解决浏览器刷新缓存
转载: https://www.jianshu.com/p/cf63a1fabc86 现实开发中,例如‘商品列表页’跳转‘商品详情页’,返回时,不重新加载刷新页面,并且滚动到原来的位置. 1.首先,先 ...
- CentOS7下NFS服务安装及配置固定端口
CentOS7下NFS服务安装及配置 系统环境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64 软件版本:nfs-utils-1. ...
- 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 ...
- sql server 利用存储过程http请求调用URL链接访问方法
sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO EXEC sp_configure 'Ole Automatio ...
- SonarQube + Jenkins代码审查环境安装文档 v1.2
1. 安装SonarQube 1.1. 下载 下载地址:https://www.sonarqube.org/downloads/ 本次使用安装包为:sonarqube-7.4.zip 需要提前准备jd ...