programing

Spring Boot 어플리케이션과 H2 파일 데이터베이스

powerit 2023. 3. 4. 15:15
반응형

Spring Boot 어플리케이션과 H2 파일 데이터베이스

spring boot 어플리케이션 부팅 시 H2 데이터베이스 셋업을 하려고 합니다.application.properties에서 데이터베이스를 설정했습니다.

spring.datasource.url = jdbc:h2:file:~/testdb
spring.datasource.username = sa
spring.datasource.password = sa
spring.datasource.driverClassName = org.h2.Driver

Application.java 파일:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

        CreateH2Database createH2Database = new CreateH2Database();
        createH2Database.create();
    }
}

CreateH2 데이터베이스자바:

public class CreateH2Database {

    private Logger log = Logger.getLogger(CreateH2Database.class);

    @Autowired
    protected JdbcTemplate jdbcTemplate;

    public void create() {
        log.info("Creating H2 Database");
        createUsers();
    }

    private void createUsers() {
        log.info("Creating users table");
        jdbcTemplate.execute("create table if not exists users (id serial, first_name varchar(255), last_name varchar(255))");
        String[] names = "John Woo;Jeff Dean;Josh Bloch;Josh Long".split(";");
        for (String fullname : names) {
            String[] name = fullname.split(" ");
            log.info("Inserting user record for " + name[0] + " " + name[1] + "\n");
            jdbcTemplate.update(
                "INSERT INTO users(first_name,last_name) values(?,?)",
                name[0], name[1]);
            }
        }
    }

응용 프로그램이 시작되면 Users 테이블이 아직 존재하지 않는 경우 Users 테이블을 만들고 테이블에 사용자를 삽입합니다.테이블이 이미 존재한다면 수정하지 않았으면 합니다.

  1. 저는...NullPointerExceptionjdbcTemplate.execute. 어떻게 하면 얻을 수갑을jdbcTemplate주입할 수혈?지금까지 본 예에서는 데이터 소스를 수동으로 작성해야 합니다.그 후 JdbcTemplate가 생성됩니다.단, 이 예의 데이터 소스는 application.properties 값을 기반으로 작성된 것으로 보입니다.
  2. 이것이 데이터베이스 셋업에 대한 올바른 접근법입니까(즉,CreateH2Database(Spring Application 시작 후)다른 애플리케이션 서버에서 WAR로 애플리케이션을 실행하는 경우 이 접근법이 유효합니까?

Spring Boot을 사용하고 있기 때문에 Spring Boot의 데이터베이스 초기화 기능을 활용할 필요가 있습니다.독자적인 실장을 전개할 필요는 없습니다.

당신이 해야 할 일은 파일만 있으면schema.sql그리고.data.sql클래스 패스의 루트(대부분의 경우)에서/resources). Spring Boot은 이러한 데이터베이스를 자동 검출하여 첫 번째 데이터베이스를 생성하고 두 번째 데이터베이스를 실행하여 데이터베이스를 채웁니다.

Spring Boot 문서의 이 부분을 참조하십시오.

조건부로 초기화를 실행할 필요가 있는 경우(통합 테스트를 실행하는 경우에만), 스프링 프로파일을 활용할 수 있습니다.이 경우 테스트 프로파일의 속성 파일에는

spring.datasource.initialize=true

다른 프로파일의 속성 파일에는

spring.datasource.initialize=false

언급URL : https://stackoverflow.com/questions/24603721/spring-boot-application-with-h2-file-database

반응형