在服务器启动时创建测试数据并将其插入数据库的正确方法是什么(我使用的是JPA / JDBC支持的Postgres实例)。
最好以创建实体并使它们通过Repository接口持久化的形式,而不是编写简单的SQL代码。像RoR的Rake db:seed助手一样。
Rake db:seed
如果在所有的Bean都已经注入并且数据库准备就绪时,框架公开了执行任务的钩子,那么它也可以工作。
您可以捕获ApplicationReadyEvent然后插入演示数据,例如:
ApplicationReadyEvent
@Component public class DemoData { @Autowired private final EntityRepository repo; @EventListener public void appReady(ApplicationReadyEvent event) { repo.save(new Entity(...)); } }
或者,您可以实现CommandLineRunner或ApplicationRunner在应用程序完全启动时加载演示数据:
CommandLineRunner
ApplicationRunner
@Component public class DemoData implements CommandLineRunner { @Autowired private final EntityRepository repo; @Override public void run(String...args) throws Exception { repo.save(new Entity(...)); } } @Component public class DemoData implements ApplicationRunner { @Autowired private final EntityRepository repo; @Override public void run(ApplicationArguments args) throws Exception { repo.save(new Entity(...)); } }
或者甚至像在您的Application(或其他“ config”)类中的Bean一样实现它们:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public CommandLineRunner demoData(EntityRepository repo) { return args -> { repo.save(new Entity(...)); } } }