Spring Bootを初めて使用するので、MongoDBの接続の詳細をどのように構成できるのか疑問に思っています。通常の例を試しましたが、接続の詳細については説明していません。
使用するデータベースと、MongoDBを実行するホストのURL /ポートを指定したいと思います。
ヒントやヒントはありますか?
回答:
ブートドキュメントを引用するだけです:
spring.data.mongodb.uri
プロパティを設定してURLを変更するか、またはを指定することができますhost/port
。たとえば、次のように宣言できますapplication.properties
。
spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017
spring.data.mongodb
プレフィックスに使用できるすべてのオプションは、次のフィールドですMongoProperties
。
private String host;
private int port = DBPort.PORT;
private String uri = "mongodb://localhost/test";
private String database;
private String gridFsDatabase;
private String username;
private char[] password;
spring.data.mongodb.host
そしてspring.data.mongodb.port
、あなたが使用している場合、サポートされていませんMongoの3.0 Javaドライバを。このような場合はspring.data.mongodb.uri
、次のようにすべての構成を提供するために使用する必要があります。
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345
Mavenプロジェクトsrc/main/resources/application.yml
で、次の内容のファイルを作成します。
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は、このファイルを自動的に使用してアプリケーションを構成します。次に、統合プロファイルを使用してSpring Bootアプリケーションを起動できます(ローカルのMongoDBを使用します)
java -jar -Dspring.profiles.active=integration your-app.jar
または本番プロファイルを使用して(そして本番MongoDBを使用して)
java -jar -Dspring.profiles.active=production your-app.jar
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;
}
}
if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
MongoDBには「認証データベース」の概念があることに注意することも重要です。これは、接続しているデータベースとは異なる場合があります。たとえば、Mongoの公式Dockerイメージを使用し、環境変数MONGO_INITDB_ROOT_USERNAMEとを指定した場合 MONGO_INITDB_ROOT_PASSWORD、ユーザーは「admin」データベースに作成されます。これは、おそらく使用するデータベースではありません。この場合、以下を使用して、application.propertiesファイルでそれに応じてパラメーターを指定する必要があります。
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>
MONGO_INITDB_ROOT_USERNAME
がMONGO_INITDB_ROOT_PASSWORD
、の場合ですpassword
。
これが、Spring Boot 2.0でカスタムMongoClientを作成し、接続の制御を強化する方法です。
完全なソースコードについては、githubリンクをたどってください
@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;
}}