封装mongodb遇到的坑
项目中想用mongodb,各工程都会用到,所以打算把它封装在common包里。期间遇到几个问题,这里记录一下。
1、mongodb的配置文件是放在common包中还是放在各个要调用mongodb的工程中?
由于考虑到所有的工程都是调用同一个mongodb服务,所以最终决定将配置文件放在common包里。
2、配置文件是用bootstrap.yml还是application.yml?
一开始用的是bootstrap.yml,但是发现启动调用common包的工程时会报错,后来查了查,发现bootstrap.yml 先于 application.yml 加载,导致工程启动时没有获取到mongodb的配置(也可能不全是这个原因,加载不到配置文件,跟下面的一个问题也有关系),后来改成了application.yml启动成功。
spring:
data:
mongodb:
uri: mongodb://admin:admin@192.168.1.1:27017/admin
dbname: admin
3、common包没有自动加载配置文件
不知道什么原因,mongodb配置文件没有自动加载,所以单独写了一个mongodb的配置类来读取mongodb的配置文件。
package com.company.mongodb;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
/**
* @Description:mongodb配置类
*
*/
@Data
@Configuration
public class MongoConfig {
/**
* 读取mongdb配置文件uri
*/
@Value("${spring.data.mongodb.uri}")
private String mongodbUri;
/**
* 读取mongdb配置文件数据库名称
*/
@Value("${spring.data.mongodb.dbname}")
private String dbname;
@Bean
public MongoClient mongoClient() {
//MongoClient client=new MongoClient(new MongoClientURI("mongodb://admin:admin@127.0.0.1:27017/admin"));
MongoClient client = new MongoClient(new MongoClientURI(mongodbUri));
return client;
}
@Bean
public MongoTemplate mongoTemplate() {
//return new MongoTemplate(mongoClient(), "admin");
return new MongoTemplate(mongoClient(), dbname);
}
}
但是启动调用的工程时,还是报错。后来查了资料,说要在启动类上移出mongodb的自动配置。
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
package com.company;
import com.bolt.core.launch.BoltApplication;
import com.bolt.core.launch.constant.AppConstant;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* 系统模块启动器 *
*
*/
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@SpringCloudApplication
@EnableFeignClients(AppConstant.BASE_PACKAGES)
public class SystemApplication {
public static void main(String[] args) {
Application.run("company-system", SystemApplication.class, args);
}
}
还没有评论,来说两句吧...