添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

host,database,username,password の記載は uri: mongodb://localhost/spring-mongo とすることも可能 です。

ここで指定している username,password はどこで設定したかというと、 image: mongo:4.2 の ENTRYPOINT である docker-entrypoint.sh にて実行される .js か .sh ファイル にて流し込んでいます。

$ ls -1 mongo/init
01_import_init_data.json
01_import_init_data.sh
02_create_user.js
> db.customer.find() { "_id" : ObjectId("6024e6a39c82f64f379738ca"), "firstName" : "Mike", "lastName" : "Popcorn", "_class" : "com.kiyotakeshi.spring.mongo.Customer" } { "_id" : ObjectId("6024e6a39c82f64f379738cb"), "firstName" : "Sam", "lastName" : "Smith", "_class" : "com.kiyotakeshi.spring.mongo.Customer" }

これらを接続先として、 application. yaml で指定していたわけです。

あとは、アプリを起動すると...

./mvnw spring-boot:run

MongoDB につなぎこみ、検索できています。

※このアプリの実装はほぼ 参考 記載の Spring のガイドのままです

------------------------------
Customers found with findAll()
2021-02-14 13:30:26.807  INFO 6466 --- [           main] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:12}] to localhost:27017
Customer{id='6024e6a39c82f64f379738ca', firstName='Mike', lastName='Popcorn'}
Customer{id='6024e6a39c82f64f379738cb', firstName='Sam', lastName='Smith'}
--------------------------------
Customer found with findByFirstName('Alice'):
--------------------------------
Customers found with findByLastName('Smith'):
Customer{id='6024e6a39c82f64f379738cb', firstName='Sam', lastName='Smith'}
2021-02-14 13:30:26.848  INFO 6466 --- [extShutdownHook] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:3, serverValue:12}] to localhost:27017 because the pool has been closed.
Process finished with exit code 0

先ほどの設定で、そのままアプリを起動するとコネクション時に認証エラーに。

Caused by: org.springframework.data.mongodb.UncategorizedMongoDbException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='demo', source='spring-mongo', password=<hidden>, mechanismProperties=<hidden>}; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='demo', source='spring-mongo', password=<hidden>, mechanismProperties=<hidden>}
Caused by: com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='demo', source='spring-mongo', password=<hidden>, mechanismProperties=<hidden>}
Caused by: com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017. The full response is {"ok": 0.0, "errmsg": "Authentication failed.", "code": 18, "codeName": "AuthenticationFailed"}
2021-02-14 13:42:18.968  INFO 6735 --- [           main] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:4}] to localhost:27017 because there was a socket exception raised by this connection.

以下のように、 application. yaml に authentication-database と接続情報を記載する必要があります。

      host: localhost
      database: spring-mongo
      username: root # if you set "MONGO_INITDB_ROOT_USERNAME", change that username
      password: 1qazxsw2
      # if you set "MONGO_INITDB_ROOT_*", in docker-compose
      authentication-database: admin
      # host,database,username,password の記載を一行にまとめる場合
      # uri: mongodb://root:1qazxsw2@localhost/spring-mongo?authSource=admin

これで無事にコネクションできます。

  • Spring のガイドの日本語翻訳版
  • docker-composeでmongoDB環境を構築して使う
  • 【MongoDB】MongoDBのDockerコンテナ起動時に認証用ユーザーを作成する
  • 【備忘録】Spring Boot+MongoDB (Docker) でRESTfulなAPIを作成してCRUDする
  •