Spring Boot:如果不存在,则在启动时在 mongodb 中创建文档

Posted

技术标签:

【中文标题】Spring Boot:如果不存在,则在启动时在 mongodb 中创建文档【英文标题】:SpringBoot: Create document in mongodb on startup if not exists 【发布时间】:2021-12-30 15:40:02 【问题描述】:

我在 SpringBoot 和 Mongodb 上有一个小服务作为数据库。 我需要能够在启动时创建一个包含一个文档(非常基本:id、name、status)的小集合。如果不存在,则类似于 sql create table,但用于 mongo。我怎么做? 我试图初始化文档属性中的值,但没有帮助。 目前,集合和文档只有在我使用 API 添加时才会出现。

【问题讨论】:

【参考方案1】:

您可以利用 spring 内部事件机制。 当您的应用程序准备就绪时,spring 会触发事件ApplicationReadyEvent

您可以收听此事件并初始化您的收藏:

@Component
public class DataInit implements ApplicationListener<ApplicationReadyEvent> 

    private final MyRepository myRepository;

    public DataInit(MyRepository myRepository) 
        this.myRepository = myRepository;
    

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) 
        // init data
    

【讨论】:

【参考方案2】:

您可能想要使用 ApplicationRunnerCommandLineRunner 之类的东西,它们可以定义为 bean。

例子:

@SpringBootApplication
public class MyApplication 

    public static void main(String[] args) 
        SpringApplication.run(MyApplication .class, args);
    

    @Bean
    public CommandLineRunner initialize(MyRepository myRepository) 

        return args -> 
            // Insert elements into myRepository 
        ;
    

CommandLineRunnerApplicationRunner 都是函数式接口,因此我们可以为它们使用 lambda。 Spring Boot 将在应用程序启动时执行它们。

【讨论】:

以上是关于Spring Boot:如果不存在,则在启动时在 mongodb 中创建文档的主要内容,如果未能解决你的问题,请参考以下文章

《spring boot》8.2章学习时无法正常启动,报“ORA-00942: 表或视图不存在 ”

如果我们保持空闲一段时间,则在连接到 Azure MSSQL DB 时,Spring Boot 应用程序中的数据库连接将关闭

spring boot启动自动关闭

spring boot jar启动

boost::interprocess 共享内存段函数 find() 如果段已经存在,则在启动时挂起

如果 Spring Boot 上不存在 Microsoft SQL Server 自动创建架构(application.properties)