SpringBoot中如何整合MongoDB多数据源
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本篇文章为大家展示了SpringBoot中如何整合MongoDB多数据源,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。依赖// build.gradleimp
千家信息网最后更新 2024年09月22日SpringBoot中如何整合MongoDB多数据源
本篇文章为大家展示了SpringBoot中如何整合MongoDB多数据源,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
依赖
// build.gradleimplementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
配置文件
# application.ymlspring: data: mongodb: primary: uri: mongodb://localhost:27017/db1 secondary: uri: mongodb://localhost:27017/db2
主数据库配置
// PrimaryMongoConfig.javapackage com.fengwenyi.springboot_mongo_multi_source.config;import com.mongodb.MongoClientURI;import org.springframework.boot.autoconfigure.mongo.MongoProperties;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.data.mongodb.MongoDbFactory;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.SimpleMongoDbFactory;import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;/** * MongoDB Primary Config * @author Erwin Feng * @since 2019-07-01 17:12 */@Configuration@EnableMongoRepositories(basePackages = "com.fengwenyi.springboot_mongo_multi_source.primary", mongoTemplateRef = "primaryMongoTemplate")public class PrimaryMongoConfig { @Bean @Primary @ConfigurationProperties(prefix="spring.data.mongodb.primary") public MongoProperties primaryMongoProperties() { return new MongoProperties(); } @Primary @Bean(name = "primaryMongoTemplate") public MongoTemplate primaryMongoTemplate() throws Exception { return new MongoTemplate(primaryFactory(primaryMongoProperties())); } @Bean @Primary public MongoDbFactory primaryFactory(MongoProperties mongoProperties) throws Exception { return new SimpleMongoDbFactory(new MongoClientURI(primaryMongoProperties().getUri())); }}
副数据库配置
// SecondaryMongoConfig.javapackage com.fengwenyi.springboot_mongo_multi_source.config;import com.mongodb.MongoClientURI;import org.springframework.boot.autoconfigure.mongo.MongoProperties;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.data.mongodb.MongoDbFactory;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.SimpleMongoDbFactory;import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;/** * MongoDB Secondary Config * @author Erwin Feng * @since 2019-07-01 17:12 */@Configuration@EnableMongoRepositories(basePackages = "com.fengwenyi.springboot_mongo_multi_source.secondary", mongoTemplateRef = "secondaryMongoTemplate")public class SecondaryMongoConfig { @Bean @ConfigurationProperties(prefix="spring.data.mongodb.secondary") public MongoProperties secondaryMongoProperties() { return new MongoProperties(); } @Bean(name = "secondaryMongoTemplate") public MongoTemplate secondaryMongoTemplate() throws Exception { return new MongoTemplate(secondaryFactory(secondaryMongoProperties())); } @Bean public MongoDbFactory secondaryFactory(MongoProperties mongoProperties) throws Exception { return new SimpleMongoDbFactory(new MongoClientURI(secondaryMongoProperties().getUri())); }}
用户实体,副
// User.javapackage com.fengwenyi.springboot_mongo_multi_source.secondary.entity;import lombok.Data;import lombok.experimental.Accessors;import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.Document;import java.io.Serializable;import java.time.Instant;/** * 用户 * @author Erwin Feng * @since 2019-07-01 17:15 */@Data@Accessors(chain = true)@Document(collection = "t_user")public class User implements Serializable { private static final long serialVersionUID = -7229906944062898852L; /** ID */ @Id private String id; /** 用户名 */ private String username; /** 年龄 */ private Integer age; /** 注册时间 */ private Instant registerTime;}
用户查询仓库,副
// UserRepository.javapackage com.fengwenyi.springboot_mongo_multi_source.secondary.repository;import com.fengwenyi.springboot_mongo_multi_source.secondary.entity.User;import org.springframework.data.mongodb.repository.MongoRepository;import java.util.List;/** * 用户 * @author Erwin Feng * @since 2019-07-01 17:18 */public interface UserRepository extends MongoRepository{ /** * 通过用户名查询 * @param username 用户名 * @return */ List findAllByUsername(String username);}
登录日志实体,主
// LoginLog.javapackage com.fengwenyi.springboot_mongo_multi_source.primary.entity;import lombok.Data;import lombok.experimental.Accessors;import org.springframework.data.annotation.Id;import java.io.Serializable;import java.time.Instant;/** * 登录日志 * @author Erwin Feng * @since 2019-07-01 17:18 */@Data@Accessors(chain = true)public class LoginLog implements Serializable { private static final long serialVersionUID = -6694661682102504919L; /** ID */ @Id private String id; /** 用户ID */ private String uid; /** 用户名 */ private String username; /** 登录时间 */ private Instant loginTime;}
登录日志查询仓库,主
// LoginLogRepository.javapackage com.fengwenyi.springboot_mongo_multi_source.primary.repository;import com.fengwenyi.springboot_mongo_multi_source.primary.entity.LoginLog;import org.springframework.data.mongodb.repository.MongoRepository;/** * 登录日志 * @author Erwin Feng * @since 2019-07-01 17:21 */public interface LoginLogRepository extends MongoRepository{}
初始化
// InitController.javapackage com.fengwenyi.springboot_mongo_multi_source.controller;import com.fengwenyi.springboot_mongo_multi_source.secondary.entity.User;import com.fengwenyi.springboot_mongo_multi_source.secondary.repository.UserRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;import java.time.Instant;import java.util.ArrayList;import java.util.List;/** * 初始化工具类 * @author Erwin Feng * @since 2019-07-01 17:24 */@RestControllerpublic class InitController { /** [mongo] 用户 */ @Autowired private UserRepository userRepository; @PostConstruct public void init() { Listall = userRepository.findAll(); if (all.size() > 0) return; userRepository.save(new User().setUsername("Zhangsan").setAge(20).setRegisterTime(Instant.now())); List users = new ArrayList<>(); User u1 = new User().setUsername("u1").setAge(19).setRegisterTime(Instant.now()); User u2 = new User().setUsername("u2").setAge(20).setRegisterTime(Instant.now()); User u3 = new User().setUsername("u3").setAge(10).setRegisterTime(Instant.now()); users.add(u1); users.add(u2); users.add(u3); userRepository.saveAll(users); }}
测试代码
// TestController.javapackage com.fengwenyi.springboot_mongo_multi_source.controller;import com.fengwenyi.springboot_mongo_multi_source.primary.entity.LoginLog;import com.fengwenyi.springboot_mongo_multi_source.primary.repository.LoginLogRepository;import com.fengwenyi.springboot_mongo_multi_source.secondary.entity.User;import com.fengwenyi.springboot_mongo_multi_source.secondary.repository.UserRepository;import net.iutil.ApiResult;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.query.Query;import org.springframework.util.StringUtils;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.time.Instant;import java.util.List;/** * 测试 * @author Erwin Feng * @since 2019-07-01 17:28 */@RestController@RequestMapping("/test")public class TestController { /** [mongo] 用户 */ @Autowired private UserRepository userRepository; /** [mongo] 登录日志 */ @Autowired private LoginLogRepository loginLogRepository; /** [mongo] */ @Autowired private MongoTemplate mongoTemplate; /** * 登录 * @param username * @return */ @GetMapping("/login") public ApiResult login(String username) { if (StringUtils.isEmpty(username)) return ApiResult.error().setMsg("用户名不能为空"); Listusers = userRepository.findAllByUsername(username); if (users.size() == 1) { // 记录日志 loginLogRepository.save(new LoginLog().setUid(users.get(0).getId()).setUsername(username).setLoginTime(Instant.now())); return ApiResult.success(); } if (users.size() == 0) return ApiResult.error().setMsg("用户名查询失败"); return ApiResult.error().setMsg("用户异常"); } /** * 登录日志 * @return */ @GetMapping("/login-log") public ApiResult loginLog() { Query query = new Query(); List loginLogs = mongoTemplate.find(query, LoginLog.class); return ApiResult.success(loginLogs); }}
测试用户登录
GET http://localhost:8080/test/login?username=Zhangsan
响应:
{ "code": 0, "msg": "Success"}
测试登录日志
GET http://localhost:8080/test/login-log
响应:
{ "code": 0, "msg": "Success", "data": [ { "id": "5d19d7f5cede54c46b6b20c5", "uid": "5d19d560cede54c45701e12a", "username": "Zhangsan", "loginTime": "2019-07-01T09:52:53.447Z" }, { "id": "5d19da82cede54c46f77579a", "uid": "5d19d560cede54c45701e12a", "username": "Zhangsan", "loginTime": "2019-07-01T10:03:46.496Z" }, { "id": "5d19df5fcede54c46f77579b", "uid": "5d19d560cede54c45701e12a", "username": "Zhangsan", "loginTime": "2019-07-01T10:24:31.272Z" }, { "id": "5d19df6acede54c46f77579c", "uid": "5d19d560cede54c45701e12b", "username": "u1", "loginTime": "2019-07-01T10:24:42.199Z" }, { "id": "5d19df6dcede54c46f77579d", "uid": "5d19d560cede54c45701e12d", "username": "u3", "loginTime": "2019-07-01T10:24:45.421Z" } ]}
上述内容就是SpringBoot中如何整合MongoDB多数据源,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
用户
登录
日志
用户名
数据
查询
测试
配置
数据源
整合
仓库
内容
实体
技能
数据库
时间
知识
简明
简明扼要
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
在岗位上守护网络安全
软件开发起步
荒野大镖客2更换服务器
软件开发企业的融资方案
司法局网络安全检查情况汇报
星星棋牌服务器
服务器字体颜色是什么问题
一百万人游戏需要多少服务器
软件开发 项目经理制度
比特币算力服务器
网络安全等级保护年度测评
盈环网络技术上海有限公司
网络安全法推荐什么样的网络空间
质谱分子网络技术
高顿教育互联网科技地址
李红网络安全
服务器的攻击方式
网上书城怎么连接数据库
tbc埃提耶什服务器怎么样
档案数据库有哪三种类型
导出数据库代码
深圳哪里可以买到华为服务器
软件开发框架什么意思
徐州微型软件开发配置
云计算的构成包括服务器嘛
福建龙岩中经网络技术
数据库管理技术和应用
路由器服务器设置方法
网络安全的产品投入
软件开发兼职好做么