반응형
설명
- H2는 자바로 구현된 오픈소스 데이터베이스
- 인메모리와 파일 기반의 데이터베이스 설정이 가능하다.
- 별도의 설치 과정 없이 임베디드로 바로 사용할 수 있다.
Dependency 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
DB 스크립트 추가
- 서버 구동시 스키마 생성, 데이터 추가를 위해 필요
- ~/src/main/resources/schema.sql
DROP TABLE IF EXISTS User; CREATE TABLE User ( userSeq BIGINT UNSIGNED AUTO_INCREMENT, userName VARCHAR(100), regDate DATETIME, PRIMARY KEY (userSeq) );
- ~/src/main/resources/data.sql
INSERT INTO User (userName, regDate) VALUES ('john', NOW()); INSERT INTO User (userName, regDate) VALUES ('tom', CURRENT_DATE()); INSERT INTO User (userName, regDate) VALUES ('jane', TIMESTAMPADD(DAY, -7, CURRENT_DATE())); INSERT INTO User (userName, regDate) VALUES ('thompson', PARSEDATETIME(TO_CHAR(TIMESTAMPADD(DAY, -7, NOW()), 'yyyy-MM-dd'), 'yyyy-MM-dd'));
application.properties
# File 모드
# spring.datasource.url=jdbc:h2:file:~/testdb;MODE=MySQL;
# In-Memory 모드
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL;
# 공통 설정
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.platform=h2
spring.datasource.username=sa
spring.datasource.password=
# http://localhost:8080/h2-console로 접속하여 쿼리를 수행해볼 수 있음
spring.h2.console.path=/h2-console
spring.h2.console.enabled=true
TCP 모드 설정
- 외부 클라이언트로 접속 가능하도록 설정
- 외부 클라이언트 접속이 불필요하면 해당 단계를 건너뛸 수 있다.
@Configuration
public class H2ServerConfig {
@Bean(initMethod = "start", destroyMethod = "stop")
public Server H2DatabaseServer() throws SQLException {
// 클라이언트에서 jdbc:h2:tcp://localhost:9092/mem:testdb 경로로 접속 가능
return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
}
}
테스트
@SpringBootTest
public class H2Test {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void testSelect() {
List<User> users = jdbcTemplate.query("SELECT userSeq, userName, regDate From User", (rs, rowNum) -> new User(
rs.getLong("userSeq"),
rs.getString("userName"),
rs.getTimestamp("regDate").toLocalDateTime()
));
assertEquals(4, users.size());
assertEquals("john", users.get(0).userName);
assertEquals("tom", users.get(1).userName);
assertEquals("jane", users.get(2).userName);
assertEquals("thompson", users.get(3).userName);
}
@AllArgsConstructor
@Data
private static class User {
private long userSeq;
private String userName;
private LocalDateTime regDate;
}
}
참고
반응형
'Development > Spring' 카테고리의 다른 글
[Spring] Testcontainers (0) | 2021.04.15 |
---|---|
[Spring] Server Sent Event(SSE) (0) | 2021.03.30 |
[Spring] Spring Cloud Feign (0) | 2020.12.27 |
[Spring] Spring Cloud Gateway (0) | 2020.12.27 |
[Spring] Spring Cloud Hystrix (0) | 2020.12.27 |