在Spring Boot应用程序初始化时将数据插入MongoDB容器


当应用程序开始运行时,我必须在MongoDB的Collection中插入一些示例数据。我已经完成了以下步骤,但没有成功。
  1. 在init_script文件夹下创建了entrypoint.js

入口点.js

use admin;
db.createUser(
{
user: "patient_db",
pwd: "14292",
roles: [ { role: "readWrite", db: "patient_db" } ]
}
);
db.grantRolesToUser( "patient_db", [{ role: "readWrite", db: "patient_db"}]); 
  1. 在资源路径中创建了data.js文件

src/main/resources/data.js

use patient_db;
db.createCollection("holiday");
db.holiday.insert({holiday_date:'25-12-2021',holiday_name:'Christmas',created_by:'John Wick',modified_by:'John_Wick',created_date_time:'2021-04-25 04:23:55',modified_date_time:'2021-04-25 04:23:55'});
  1. 配置了docker-compose.yml

docker compose.yml

version: "3"
services:
patient-service:
image: patient-service:1.0
container_name: patient-service
ports:
- 9090:9090
restart: on-failure
networks:
- patient-mongo
depends_on:
- mongo-db
links:
- mysql-db
mongo-db:
image: mongo:latest
container_name: mongo-db
ports:
- 27017:27017
networks:
- patient-mongo
volumes:
- 'mongodata:/data/db'
- './init_scripts:/docker-entrypoint-initdb.d' 
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=14292
restart: unless-stopped

networks:
patient-mongo:

volumes:
mongodata:

4.最后,连接MongoDB

属性-dev.yml

spring:
data:
mongodb:
host: mongo-db
port: 27017
database: patient_db

这就是我将入口点代码插入mongodb容器的方式:

  1. 创建.sh文件(例如.sh(
  2. 创建mongo用户和要插入的数据

example.sh

#!/usr/bin/env bash
echo "Creating mongo users..."
mongo admin --host localhost -u root -p mypass --eval "
db = db.getSiblingDB('patient_db');
db.createUser(
{
user: "patient_db",
pwd: "14292",
roles: [ { role: "readWrite", db: "patient_db" } ]
}
);
db.createCollection('holiday');
db.holiday.insert({holiday_date:'25-12-2021',holiday_name:'Christmas',
created_by:'John Wick',modified_by:'John_Wick',created_date_time:'2021-04-25 04:23:55',modified_date_time:'2021-04-25 04:23:55'});
"
echo "Mongo users and data created."
  1. 在docker compose中,插入入口点

    volumes:
    - 'mongodata:/data/db'
    - './example.sh:/docker-entrypoint-initdb.d/example.sh'
    

也许它不是更干净的选择,但它运行得很好。

我这样做是因为我没有让它处理js文件。

谢谢@Schwarz54的回答。它与js文件一起工作

init_scripts/mongo_int.js

var db = connect("mongodb://admin:14292@127.0.0.1:27017/admin");
db = db.getSiblingDB('patient_db'); /* 'use' statement doesn't support here to switch db */
db.createUser(
{
user: "patient_db",
pwd: "14292",
roles: [ { role: "readWrite", db: "patient_db" } ]
}
);

db.createCollection("holiday");
db.holiday.insert({holiday_date:'25-12-2021',holiday_name:'Christmas',created_by:'John Wick',modified_by:'John_Wick',created_date_time:'2021-04-25 04:23:55',modified_date_time:'2021-04-25 04:23:55'});

docker compose.yml

volumes:
- 'mongodata:/data/db'
- './init_scripts:/docker-entrypoint-initdb.d' 

最新更新