Spring Boot:如果不存在,则在启动时在 mongodb 中创建文档
SpringBoot: Create document in mongodb on startup if not exists
我在 SpringBoot 上有一个小服务,Mongodb 作为数据库。
我需要能够在启动时用一个文档(非常基本的:id、name、status)创建一个小集合。 sql 的模拟如果不存在则创建 table,但对于 mongo。我怎么做?
我试图初始化文档属性中的值,但没有帮助。
目前,仅当我使用 API 添加时才会出现集合和文档。
您可能想要使用类似 ApplicationRunner
or CommandLineRunner
的东西,它可以被定义为一个 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
};
}
}
CommandLineRunner
和ApplicationRunner
都是函数式接口,所以我们可以为它们使用lambda。 Spring Boot 将在应用程序启动时执行它们。
您可以利用 spring 内部事件机制。
当您的应用程序准备就绪时,spring 触发事件 ApplicationReadyEvent
您可以收听此事件并初始化您的 collection:
@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
}
}
我在 SpringBoot 上有一个小服务,Mongodb 作为数据库。 我需要能够在启动时用一个文档(非常基本的:id、name、status)创建一个小集合。 sql 的模拟如果不存在则创建 table,但对于 mongo。我怎么做? 我试图初始化文档属性中的值,但没有帮助。 目前,仅当我使用 API 添加时才会出现集合和文档。
您可能想要使用类似 ApplicationRunner
or CommandLineRunner
的东西,它可以被定义为一个 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
};
}
}
CommandLineRunner
和ApplicationRunner
都是函数式接口,所以我们可以为它们使用lambda。 Spring Boot 将在应用程序启动时执行它们。
您可以利用 spring 内部事件机制。
当您的应用程序准备就绪时,spring 触发事件 ApplicationReadyEvent
您可以收听此事件并初始化您的 collection:
@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
}
}