Spring boot Spring Boot在启动时将示例数据插入数据库

Spring boot Spring Boot在启动时将示例数据插入数据库,spring-boot,spring-data-jpa,Spring Boot,Spring Data Jpa,在服务器启动时创建测试数据并将其插入数据库的正确方法是什么(我使用的是一个JPA/JDBC支持的Postgres实例) 最好是创建实体并通过存储库接口持久化它们,而不是编写简单的SQL代码。类似于RoR的rakedb:seedhelper 如果框架在所有bean都已注入且数据库已准备就绪的情况下公开了一个用于执行任务的钩子,那么该钩子也可以工作。来自Spring文档: 使用Hibernate初始化数据库 如果Hibernate从头开始创建架构(即如果ddl auto属性设置为create或cre

在服务器启动时创建测试数据并将其插入数据库的正确方法是什么(我使用的是一个JPA/JDBC支持的Postgres实例)

最好是创建实体并通过存储库接口持久化它们,而不是编写简单的SQL代码。类似于RoR的rakedb:seedhelper


如果框架在所有bean都已注入且数据库已准备就绪的情况下公开了一个用于执行任务的钩子,那么该钩子也可以工作。

来自Spring文档:

使用Hibernate初始化数据库 如果Hibernate从头开始创建架构(即如果ddl auto属性设置为create或create drop),则在启动时将在类路径根目录下执行名为import.sql的文件。如果您非常小心,这对演示和测试非常有用,但可能不是您希望在生产中的类路径上使用的东西。它是一个Hibernate特性(与Spring无关)


您可以捕获应用程序ReadyEvent,然后插入演示数据,例如:

@组件
公共类蠕形螨{
@自动连线
私人最终实体报告回购;
@事件监听器
公共无效通知(ApplicationReadyEvent事件){
回购保存(新实体(…);
}
}
或者,您可以实现
CommandLineRunner
ApplicationRunner
,以便在应用程序完全启动时加载演示数据:

@组件
公共类DemoData实现CommandLineRunner{
@自动连线
私人最终实体报告回购;
@凌驾
公共无效运行(字符串…参数)引发异常{
回购保存(新实体(…);
}
}
@组成部分
公共类DemoData实现ApplicationRunner{
@自动连线
私人最终实体报告回购;
@凌驾
公共void运行(ApplicationArguments参数)引发异常{
回购保存(新实体(…);
}
}
甚至可以像在应用程序(或其他“config”)类中的Bean一样实现它们:

@springboot应用程序
公共类应用程序{
公共静态void main(字符串[]args){
SpringApplication.run(Application.class,args);
}
@豆子
公共命令行运行程序数据(实体报告回购){
返回args->{
回购保存(新实体(…);
}
}
}
您可以这样做

    @SpringBootApplication
    public class H2Application {

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

        @Bean
        CommandLineRunner init (StudentRepo studentRepo){
            return args -> {
                List<String> names = Arrays.asList("udara", "sampath");
                names.forEach(name -> studentRepo.save(new Student(name)));
            };
        }
    }
@springboot应用程序
公共类应用程序{
公共静态void main(字符串[]args){
run(H2Application.class,args);
}
@豆子
CommandLineRunner初始化(StudentRepo StudentRepo){
返回参数->{
列表名称=Arrays.asList(“udara”、“sampath”);
name.forEach(name->studentRepo.save(新学生(姓名));
};
}
}

类路径的根是什么意思?src文件夹的根目录?因为我认为这个定义相当依赖于构建工具/平台。如果您使用的是Maven,那么可以使用像:/src/main/resources@parsathanks这样的文件夹。无论如何,对于我需要插入的数据量来说,这种方法似乎非常容易出错和耗时。如果有Java解决方案,我会更喜欢。这是根据spring boot文档,您试图实现的目标的唯一解决方案。如果答案对您有帮助,请不要忘记接受/投票。
@Autoware
注释应该是
@Autowired
?如果我想模拟o用户,例如因为我有安全的方法吗?你能更新你的例子吗?