mongo的配置信息默认使用配置文件的spring.data.mongodb前缀的信息进行配置,但是我想另外配个其他前缀的信息如logging.data.mongodb,区分默认的mongo数据源。这个就需要建个mongo配置类,以logging.data.mongodb前缀去动态配置mongo数据源。
配置文件
#日志的mongo数据库配置
logging.data.mongodb.enabled=true #支持集群,需配置uri,不支持可不需配置。 logging.data.mongodb.uri=host1:port1,host2:port2 #不支持集群,可配host、port logging.data.mongodb.host=192.168.10.58 logging.data.mongodb.port=27017 logging.data.mongodb.database= ibase3 logging.data.mongodb.username= ibase logging.data.mongodb.password= ibase3 |
配置类
/** * 日志存储在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的地址和端口 List<ServerAddress> serverAddressList = new ArrayList<>(); //如果mongodb需要支持集群,需配置uri,不支持可不需配置,配置方式:uri: host1:port1,host2:port2 if (StringUtils.isNotBlank(mongo.getUri())){ serverAddressList = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(mongo.getUri()) .stream() .map(cl -> cl.split(":")) .map(split -> new ServerAddress(split[0], Integer.parseInt(split[1]))) .collect(Collectors.toList()); }else { serverAddressList.add(new ServerAddress(mongo.getHost(), mongo.getPort())); } MongoClient mongoClient = new MongoClient(serverAddressList,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层
/** @Autowired public Map<String, Object> findSysLog(String stTime, String enTime, CommonMongoLog log, Pageable pageRequest) { public CommonMongoLog findSysLogById(String id) { public void save(CommonMongoLog log) { |