부트 개념과 활용-22.인메모리 데이터베이스(스프링 데이터)
부트 개념과 활용-22.인메모리 데이터베이스(스프링 데이터)
지원하는 인-메모리 데이터베이스
- H2 (추천, 콘솔 때문에…)
- HSQL
- Derby
Spring-JDBC가 클래스패스에 있으면 자동 설정이 필요한 빈을 설정 해줌.
- DataSource
- JdbcTemplate
인-메모리 데이터베이스 기본 연결 정보 확인하는 방법
boot_autoconfiguer - jdbc - DataSourceProperties 에서 확인가능
- URL: “testdb”
- username: “sa”
- password: “”
@Component
public class H2Runner implements ApplicationRunner {
@Autowired
DataSource dataSource;
@Override
public void run(ApplicationArguments args) throws SQLException {
Connection connection = dataSource.getConnection();
String url = connection.getMetaData().getURL();
String userName = connection.getMetaData().getUserName();
System.out.println("url : " + url);
System.out.println("userName : " + userName);
}
}
url : jdbc:h2:mem:testdb
userName : SA
로 직접 확인도 가능하다.
H2 콘솔 사용하는 방법
- spring-boot-devtools를 추가하거나… (H2콘솔 외에도 여러 가지 툴들 추가)
- spring.h2.console.enabled=true 만 추가.(굳이 다른 것들 필요 없을 때)
http://localhost:8080/h2-console 로 접속 가능 (해당 path도 변경은 가능)
@Component
public class H2Runner implements ApplicationRunner {
@Autowired
DataSource dataSource;
@Override
public void run(ApplicationArguments args) throws SQLException {
try(Connection connection = dataSource.getConnection()){
String url = connection.getMetaData().getURL();
String userName = connection.getMetaData().getUserName();
System.out.println("url : " + url);
System.out.println("userName : " + userName);
Statement statement = connection.createStatement();
String sql = "CREATE TABLE USER (ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY (id))";
statement.executeUpdate(sql);
// 자바 8 리소스 관련.. try 끝나면 알아서 리소스 정리해줌.
}
}
}
이렇게 실행을 하면
2019-12-22 00:53:06.014 INFO 8600 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
‘jdbc:h2:mem:testdb’ 이렇게 연결된게 보이고
해당 jdbc url으로 연결이 가능하다.
@Component
public class H2Runner implements ApplicationRunner {
@Autowired
DataSource dataSource;
@Autowired
JdbcTemplate jdbcTemplate; // 빈으로 주입받아 사용가능.
@Override
public void run(ApplicationArguments args) throws SQLException {
try(Connection connection = dataSource.getConnection()){
String url = connection.getMetaData().getURL();
String userName = connection.getMetaData().getUserName();
System.out.println("url : " + url);
System.out.println("userName : " + userName);
Statement statement = connection.createStatement();
String sql = "CREATE TABLE USER (ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY (id))";
statement.executeUpdate(sql);
// 자바 8 리소스 관련.. try 끝나면 알아서 리소스 정리해줌.
}
jdbcTemplate.execute("INSERT INTO USER VALUES (1, 'jaeuk')");
// 스프링이 제공하는 jdbcTemplate 로 sql 사용가능
// 예외를 던질 때 가독성이 높은 에러메세지 확인 가능(에러 게층구조를 잘 만들어 놓음)
}
}
또한 기존 방식보다 다양한 장점들이 존재하는
스프링이 제공하는 JdbcTemplate로 sql 사용이 가능하다.
- 간결하게 사용 가능 (커넥션 연결, createStatement, executeUpdate.. 등)
- 안전하게 사용가능 (try, catch, finally 등 )
- 가독성 높은 에러메세지 (에러 계층구조를 잘 만들어 놓음)