Menjadi baru di Spring Boot Saya bertanya-tanya tentang bagaimana saya dapat mengonfigurasi detail koneksi untuk MongoDB. Saya telah mencoba contoh normal tetapi tidak ada yang mencakup detail koneksi.
Saya ingin menentukan database yang akan digunakan dan url / port host yang menjalankan MongoDB.
Ada petunjuk atau tip?
spring.data.mongodb.host
danspring.data.mongodb.port
tidak didukung jika Anda menggunakan driver Mongo 3.0 Java . Dalam kasus seperti itu,spring.data.mongodb.uri
harus digunakan untuk menyediakan semua konfigurasi, seperti ini:spring.data.mongodb.uri=mongodb://user:[email protected]:12345
sumber
Dalam proyek maven buat file
src/main/resources/application.yml
dengan konten berikut:spring.profiles: integration # use local or embedded mongodb at localhost:27017 --- spring.profiles: production spring.data.mongodb.uri: mongodb://<user>:<passwd>@<host>:<port>/<dbname>
Spring Boot secara otomatis akan menggunakan file ini untuk mengkonfigurasi aplikasi Anda. Kemudian Anda dapat memulai aplikasi boot musim semi Anda dengan profil integrasi (dan menggunakan MongoDB lokal Anda)
atau dengan profil produksi (dan menggunakan MongoDB produksi Anda)
sumber
Anda dapat menentukan detail selengkapnya dengan memperluas AbstractMongoConfiguration.
@Configuration @EnableMongoRepositories("demo.mongo.model") public class SpringMongoConfig extends AbstractMongoConfiguration { @Value("${spring.profiles.active}") private String profileActive; @Value("${spring.application.name}") private String proAppName; @Value("${spring.data.mongodb.host}") private String mongoHost; @Value("${spring.data.mongodb.port}") private String mongoPort; @Value("${spring.data.mongodb.database}") private String mongoDB; @Override public MongoMappingContext mongoMappingContext() throws ClassNotFoundException { // TODO Auto-generated method stub return super.mongoMappingContext(); } @Override @Bean public Mongo mongo() throws Exception { return new MongoClient(mongoHost + ":" + mongoPort); } @Override protected String getDatabaseName() { // TODO Auto-generated method stub return mongoDB; } }
sumber
if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
Penting juga untuk diperhatikan bahwa MongoDB memiliki konsep " database otentikasi ", yang bisa berbeda dari database yang Anda sambungkan. Misalnya, jika Anda menggunakan image Docker resmi untuk Mongo dan menentukan variabel lingkungan MONGO_INITDB_ROOT_USERNAME dan MONGO_INITDB_ROOT_PASSWORD , pengguna akan dibuat di database ' admin ', yang mungkin bukan database yang ingin Anda gunakan. Dalam kasus ini, Anda harus menentukan parameter yang sesuai pada file application.properties Anda menggunakan:
spring.data.mongodb.host=127.0.0.1 spring.data.mongodb.port=27017 spring.data.mongodb.authentication-database=admin spring.data.mongodb.username=<username specified on MONGO_INITDB_ROOT_USERNAME> spring.data.mongodb.password=<password specified on MONGO_INITDB_ROOT_PASSWORD> spring.data.mongodb.database=<the db you want to use>
sumber
MONGO_INITDB_ROOT_USERNAME
tetapiMONGO_INITDB_ROOT_PASSWORD
dalam kasus apassword
.Berikut adalah Bagaimana Anda dapat melakukannya di Spring Boot 2.0 dengan membuat MongoClient kustom menambahkan Menyediakan lebih banyak kontrol untuk Koneksi,
Ikuti Tautan github untuk Kode Sumber Lengkap
@Configuration @EnableMongoRepositories(basePackages = { "com.frugalis.repository" }) @ComponentScan(basePackages = { "com.frugalis.*" }) @PropertySource("classpath:application.properties") public class MongoJPAConfig extends AbstractMongoConfiguration { @Value("${com.frugalis.mongo.database}") private String database; @Value("${com.frugalis.mongo.server}") private String host; @Value("${com.frugalis.mongo.port}") private String port; @Value("${com.frugalis.mongo.username}") private String username; @Value("${com.frugalis.mongo.password}") private String password; @Override protected String getDatabaseName() { return database; } @Override protected String getMappingBasePackage() { return "com.frugalis.entity.mongo"; } @Bean public MongoTemplate mongoTemplate() throws Exception { return new MongoTemplate(mongoClient(), getDatabaseName()); } @Override @Bean public MongoClient mongoClient() { List<MongoCredential> allCred = new ArrayList<MongoCredential>(); System.out.println("???????????????????"+username+" "+database+" "+password+" "+host+" "+port); allCred.add(MongoCredential.createCredential(username, database, password.toCharArray())); MongoClient client = new MongoClient((new ServerAddress(host, Integer.parseInt(port))), allCred); client.setWriteConcern(WriteConcern.ACKNOWLEDGED); return client; }}
sumber