mongo数据源配置与运用

本文介绍了如何在SpringBoot应用中,通过自定义配置类LoggingMonoManageConfiguration,使用不同的前缀logging.data.mongodb来配置MongoDB数据源,以便与默认的mongo数据源区分开。涉及MongoProperties、MongoTemplate和MongoDbFactory的使用。
摘要由CSDN通过智能技术生成

mongo的配置信息默认使用配置文件的spring.data.mongodb前缀的信息进行配置,但是我想另外配个其他前缀的信息如logging.data.mongodb,区分默认的mongo数据源。这个就需要建个mongo配置类,以logging.data.mongodb前缀去动态配置mongo数据源。

配置类

/**
 * 日志存储在mongo配置
 * @author lfq
 */
@Configuration
@EnableMongoRepositories(basePackages = "com.lfq.logging.dao", //如果有继承MongoRepository的dao层,这里需扫描使用该数据源的dao下的包
        mongoTemplateRef = "loggingMongoTemplate")
@ConditionalOnProperty(value = "logging.dbstore.mongo.enabled", havingValue = "true")
@PropertySource(value = {"classpath:application-logging.properties"}) //(这里是从application-logging.properties读取,如果不需要另外建配置文件,可以去掉)
public class LoggingMonoManageConfiguration {

    @Bean(name = "loggingMongoProperties")
    @ConfigurationProperties(prefix = "logging.data.mongodb")
    public MongoProperties loggingMongoProperties() {
        return new MongoProperties();
    }

    @Bean(name = "loggingMongoTemplate")
    public MongoTemplate primaryMongoTemplate(@Qualifier("loggingMongoProperties") MongoProperties loggingMongoProperties) throws Exception {
        return new MongoTemplate(loggingManagerFactory(loggingMongoProperties));
    }

    @Bean(name = "loggingMongoManagerFactory")
    public MongoDbFactory loggingManagerFactory(@Qualifier("loggingMongoProperties") MongoProperties mongo){
        MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        builder.writeConcern(WriteConcern.MAJORITY);
        //创建一个用户认证信息
        MongoCredential credential = MongoCredential.createCredential(mongo.getUsername(), mongo.getDatabase(), mongo.getPassword());
        //封装MongoDB的地址和端口
        ServerAddress address = new ServerAddress(mongo.getHost(), mongo.getPort());
        MongoClient mongoClient =  new MongoClient(address,credential,builder.build());
        return new SimpleMongoDbFactory(mongoClient, mongo.getDatabase());
    }
}

dao层(可不用dao层,直接使用MongoTemplate操作数据库)

package com.lfq.logging.dao

public interface CommonMongoLogDao extends MongoRepository<CommonMongoLog, String> {
}

service层

/**
 * mongo日志操作
 * @author lfq
 */
 @Service
public class MongoLogServiceImpl{

    @Autowired
    @Qualifier("loggingMongoTemplate")
    private MongoTemplate mongoTemplate;
    
    @Autowired
    private CommonMongoLogDao commonMongoLogDao;

    public Map<String, Object> findSysLog(String stTime, String enTime, CommonMongoLog log, Pageable pageRequest) {
         // 查询条件
        Query query = new Query();
        if (StringUtils.isNotBlank(log.getId())){
            query.addCriteria(Criteria.where("id").is(log.getId()));
        }
        if (StringUtils.isNotBlank(log.getOperationName())) {
            query.addCriteria(Criteria.where("operationName").regex(log.getOperationName()));
        }
        query.with(pageRequest);
        List<CommonMongoLog> logList = mongoTemplate.find(query, CommonMongoLog.class);
        long count = mongoTemplate.count(query, CommonMongoLog.class);
        Map<String, Object> result = new HashMap<>();
        result.put(CONENT, logList);
        result.put(TOTAL, count);
        return result;
    }

    public CommonMongoLog findSysLogById(String id) {
        commonLogDao.findById(id);
        return mongoTemplate.findById(id, CommonMongoLog.class);
}

    public void save(CommonMongoLog log) {
        commonLogDao.save(log);
        mongoTemplate.save(log);
    }
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值