Spring Boot insert sample data into database upon startup

后端 未结 3 1053
广开言路
广开言路 2020-12-15 08:19

What is the right way for creating test data upon server startup and inserting them into the database (I\'m using a JPA/JDBC backed Postgres instance).

Preferably in

相关标签:
3条回答
  • 2020-12-15 08:51

    From Spring documentation: http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/#howto-database-initialization

    Initialize a database using Hibernate A file named import.sql in the root of the classpath will be executed on startup if Hibernate creates the schema from scratch (that is if the ddl-auto property is set to create or create-drop). This can be useful for demos and for testing if you are careful, but probably not something you want to be on the classpath in production. It is a Hibernate feature (nothing to do with Spring).

    0 讨论(0)
  • 2020-12-15 08:52

    You can do like this

        @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)));
                };
            }
        }
    
    0 讨论(0)
  • 2020-12-15 08:57

    You can catch ApplicationReadyEvent then insert demo data, for example:

    @Component
    public class DemoData {
    
        @Autowired
        private final EntityRepository repo;
    
        @EventListener
        public void appReady(ApplicationReadyEvent event) {
    
            repo.save(new Entity(...));
        }
    }
    

    Or you can implement CommandLineRunner or ApplicationRunner, to load demo data when an application is fully started:

    @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(...));
        }
    }
    

    Or even implement them like a Bean right in your Application (or other 'config') class:

    @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(...));
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题