当前位置: 首页 > 知识库问答 >
问题:

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

闻人凯泽
2023-03-14

当应用程序开始运行时,我必须在MongoDB中的集合中插入一些示例数据。我已经完成了以下步骤,但不起作用。

  1. 创建入口点。在init_脚本文件夹下的js

entrypoint.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"}]); 

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'});

docker撰写。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的连接

properties-dev.yml

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

共有2个答案

杨鸿畅
2023-03-14

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

init_脚本/mongo_init。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撰写。yml

volumes:
     - 'mongodata:/data/db'
     - './init_scripts:/docker-entrypoint-initdb.d' 
端木昱
2023-03-14

这是我如何插入entrypoint代码到mongoDB容器

  1. 创建一个。sh文件(example.sh)
  2. 创建mongo用户和要插入的数据

实例嘘

#!/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."

在docker-comment插入入口点

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

也许这不是更干净的选择,但它的作品完美。

我这样做是因为我没有让它与js文件一起工作。

 类似资料:
  • 我在开发环境中使用嵌入式MongoDB数据库。它在应用程序启动时设置为空。我想在设置Spring上下文时加载应用程序所需的初始数据。 Spring Data MongoDB中是否有方法指向将加载到数据库中的JSON文件(类似于hibernate中的import.sql(hibernate.hbm2ddl.import_文件)或NoSql单元中的@UsingDataSet)?

  • 我正在将Spring Boot应用程序从版本1.5.6升级到2.1.1。当我启动应用程序时,它会卡在这一行: 当我点击这个网址:http://localhost:8888/actuator/health,我得到 同样,当我点击这个网址:http://localhost:8888/swagger-ui.html,我看到斯瓦格用户界面。 但是我的主应用程序没有启动。知道为什么它卡住了吗?

  • 我有以下情况。在我的微服务[MA]中,我希望在应用程序启动后或基于某个事件初始化/销毁一些bean。想象一下,还有另一个微服务[MB],它保存关于ContentStores的信息。在MA启动之后,我想向MB请求contentStore条目,基于此,我想根据需要创建这么多bean。可能会有一个事件触发storrecreated/storredeleted,在这种情况下,我需要销毁bean。 我目前不

  • 我试图用一个反应项目启动一个Docker容器,该项目是使用npm init反应应用程序创建的。 这是我的Docker档案

  • 问题内容: 我想在Web应用程序启动时加载属性文件并设置连接池。显然,我只想在一个地方进行一次,因此可以根据需要进行更改。对于常规的servlet,我只需将初始化代码放在servlet的init()方法中,但是您无法使用Jersey servlet对其进行访问。那么我在哪里做呢?上面链接中的侦听器如何工作? 问题答案: 您需要做的就是编写一个实现ServletContextListener接口的J

  • 我很沮丧...什么是Application EventMulticaster,如何初始化或刷新它?为什么需要它? 我必须如何或在哪里调用此刷新操作?!我没有胶水。这是我尝试在服务器上运行的第一个Grails应用程序。在Localhost中,一切都运行良好。 系统(开发、工作): Mac 系统(生产,不工作!) Ubuntu Server 14.04 LTS Grails版本:3.3.0 Groov