Springboot2.0.X+mongodb多数据源的账号密码该怎么设定
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,今天就跟大家聊聊有关Springboot2.0.X+mongodb多数据源的账号密码该怎么设定,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。之
千家信息网最后更新 2025年01月24日Springboot2.0.X+mongodb多数据源的账号密码该怎么设定
今天就跟大家聊聊有关Springboot2.0.X+mongodb多数据源的账号密码该怎么设定,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
之前在崛起于Springboot2.X + Mongodb多数据源,结果发现没有用户名和密码,替换之后不管用,然后重新写一个带用户名和密码的多数据源,方便企业级使用,目前适用于2.0.X版本,高版本的话,里面的配置Factory会过期,所以等有时间在整一个高版本的配置博客。
1、pom依赖
org.springframework.boot spring-boot-starter-data-mongodb org.springframework.boot spring-boot-starter-web org.projectlombok lombok true
2、application.properties
spring.data.mongodb.first.database=数据库名spring.data.mongodb.first.uri=mongodb://账号:密码@地址host:3717/数据库名?maxIdleTimeMS=3000spring.data.mongodb.second.database=数据库名spring.data.mongodb.second.uri=mongodb://账号:密码@地址host:3717/数据库名?maxIdleTimeMS=3000
3、config配置
@Configuration@Slf4jpublic class MultiMongoDbConfig {@Bean(name="firstMongoProperties")@Primary @ConfigurationProperties(prefix="spring.data.mongodb.first")public MongoProperties firstMongoProperties() { log.info("-------------------- liveMongoProperties init ---------------------"); return new MongoProperties(); }@Bean(name="secondMongoProperties")@ConfigurationProperties(prefix="spring.data.mongodb.second")public MongoProperties secondMongoProperties() { log.info("-------------------- monitorMongoProperties init ---------------------"); return new MongoProperties(); } /** * 如果不写这个转换工具类你在通过mongoTempleate默认向表中插入数据的时候会在表中多一个_class的字段,通过这个转换类转换后不会出现这个_class字段。 * @param factory mongodb工厂类 * @param context 上下文 * @param beanFactory bean工厂 * @return MappingMongoConverter */@Bean(name = "mongoConverter")public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context, BeanFactory beanFactory) { DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context); try { mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class)); } catch (NoSuchBeanDefinitionException ignore) { }// Don't save _class to mongo mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null)); return mappingConverter; }}
first库配置
@Configuration@EnableMongoRepositories(basePackages = "com.sports.statistics.repository.live", mongoTemplateRef = "liveMongo")public class LiveMongoTemplate {@Autowired @Qualifier("firstMongoProperties")private MongoProperties mongoProperties; @Primary @Bean(name = "liveMongo")public MongoTemplate firstMongoTemplate() {return new MongoTemplate(firstFactory(this.mongoProperties)); // return new MongoTemplate(firstFactory(this.mongoProperties), MongoTemplateHolder.mongoConverter()); }@Bean @Primary public MongoDbFactory firstFactory(MongoProperties mongoProperties) { MongoClientOptions.Builder options = new MongoClientOptions.Builder(); options.readPreference(ReadPreference.primary()); options.connectionsPerHost(10); return new SimpleMongoDbFactory(new MongoClientURI(mongoProperties.getUri(), options)); }}
second库配置
@Configuration@EnableMongoRepositories(basePackages = "com.sports.statistics.repository.monitor", mongoTemplateRef = "monitorMongo")public class MonitorMongoTemplate {@Autowired @Qualifier("secondMongoProperties")private MongoProperties mongoProperties; @Bean(name = "monitorMongo")public MongoTemplate secondTemplate() {return new MongoTemplate(secondFactory(this.mongoProperties)); //return new MongoTemplate(secondFactory(this.mongoProperties), MongoTemplateHolder.mongoConverter()); }@Bean public MongoDbFactory secondFactory(MongoProperties mongoProperties) { MongoClientOptions.Builder options = new MongoClientOptions.Builder(); options.readPreference(ReadPreference.primary()); options.connectionsPerHost(10); return new SimpleMongoDbFactory(new MongoClientURI(mongoProperties.getUri(), options)); }}
@Componentpublic class MongoTemplateHolder implements ApplicationContextAware {private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if (MongoTemplateHolder.applicationContext == null) { MongoTemplateHolder.applicationContext = applicationContext; } } /** * 获取容器 * @return ApplicationContext */public static ApplicationContext getApplicationContext() {return applicationContext; } /** * 获取MongoTemplate模板 * @param source 数据源(你想要获取的数据源) * @return MongoTemplate */public static MongoTemplate getBean(String source) throws Exception {if (StringUtils.isEmpty(source)) {throw new Exception("=========数据源名称不能为空========="); }return (MongoTemplate) getApplicationContext().getBean(source); } /** * 获取不同数据源对应的mongodbTemplate * @author chengjian * @date 2020/9/15 9:47 上午 * @param mongoDbEnum 数据源信息 */public static MongoTemplate getBean(MongoDbEnum mongoDbEnum) throws Exception {if (mongoDbEnum == null){throw new Exception("=========数据源名称不能为空========="); }return (MongoTemplate) getApplicationContext().getBean(mongoDbEnum.getDatabaseName()); } /** * @param source 数据源 * @param name 数据库名称 * @return MongoCollection */public static DBCollection getCollection(String source, String name) throws Exception {if (StringUtils.isEmpty(source)) {throw new Exception("=========数据源名称不能为空========="); }if (StringUtils.isEmpty(name)) {throw new Exception("=========空的表名称不能获取MongoCollection========="); } MongoTemplate template = (MongoTemplate) getApplicationContext().getBean(source); return (DBCollection) template.getCollection(name); }public static MappingMongoConverter mongoConverter() {return (MappingMongoConverter) getApplicationContext().getBean("mongoConverter");}}
4、枚举
@Getter@AllArgsConstructor@NoArgsConstructorpublic enum MongoDbEnum { /** * 数据源 */ LIVE("liveMongo"), MONITOR("monitorMongo"); private String databaseName;}
5、repository
first库表
public interface UserRepository extends MongoRepository{}
second库表
public interface ChatBanRepository extends MongoRepository{}
6、controller测试
@RestController@RequestMapping(value = "/user")public class UserController {@Resource UserRepository userRepository; @Resource ChatBanRepository chatBanRepository; @GetMapping(value = "/test1")public String test1() throws Exception { System.out.println("first库:user数量=="+ userRepository.count()); Query query = new Query(); MongoTemplate mongoTemplate = MongoTemplateHolder.getBean(MongoDbEnum.LIVE.getDatabaseName()); System.out.println("first库:user数量=="+ mongoTemplate.count(query,"user")); System.out.println("second库:chat数量=="+ chatBanRepository.count()); return "OK"; }}
7、结果
测试成功1
看完上述内容,你们对Springboot2.0.X+mongodb多数据源的账号密码该怎么设定有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
数据
数据源
密码
名称
数据库
配置
账号
内容
数量
版本
地址
字段
工厂
用户
用户名
结果
测试
不同
成功
上下
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
sql数据库的打开
制作电脑软件开发
餐饮软件开发需要多长时间
三菱如何编程建立一个数据库
大连网络技术学校
校园网络安全宣传活动的意义
数据库课程设计报告题目
汕尾自主可控软件开发平均价格
栖霞管理系统软件开发推荐
关于青少年网络安全知识
平台管理服务器是啥
长沙麦迅互联网科技有限公司
网络安全模式一点就卡
数据库表索引查询语句
网络技术规范分为
洛阳金蝶出纳软件开发
互联网大会2020黑科技
服务器网络维护是什么
数据库 rar
计算机网络技术第三版考试题
青浦区企业数据库销售优点
南京红网网络技术研究院
vpn网络安全性
dii专利数据库免费吗
服务好的电脑服务器回收公司
广州顺志通网络技术有限公司
java获取数据库时间
kis旗舰版修复数据库
花都软件开发项目管理
网络安全三级认证注意事项