日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

MongoDB和Java(5):Spring Data整合MongoDB(注解配置)

發布時間:2023/12/2 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(注解配置)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。