H2는 자바 기반의 DB 엔진으로서 스프링프레임워크 3 부터는 H2, HSQL 등의 내장 데이터베이스의 사용을 지원하고 있다.
해당 데이터베이스들은 오라클 같은 비교적 무거운 데이터베이스에 비해 상대적으로 가벼우며, 내장으로 사용 할 경우 개발자가 로컬에서 자체적으로 돌릴 수도 있다
스프링프레임워크3에서는 spring-jdbc 네임 스페이스에서 제공하는 jdbc:embedded-database를 이용하여 간단한 설정을 지원한다.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd"> <jdbc:embedded-database id="dataSource" type="HSQL"/> </beans>
스프링 컨테이너는 javax.sql.DataSource 타입의 빈으로 내장 데이터베이스의 인스턴스를 생성하여 인젝션 시킬 수 있도록 지원한다. 스프링에서는 HSQL, H2 및 Derby를 지원하며 타입을 명시적으로 지정하지 않는 경우 기본값은 HSQL 이다. 추가로 jdbc:embedded-database 태그를 사용하면 빈 데이터베이스만을 생성하는 것이 아니라 스키마를 만들고 여기에 데이터까지 넣어줄 수 있다.
<jdbc:embedded-database id="dataSource"> <jdbc:script location="classpath:schema.sql" execution="INIT"/> <jdbc:script location="classpath:data.sql" execution="INIT"/> </jdbc:embedded-database>
위와같이 설정 된 H2 데이터베이스의 데이터 소스는 dataSource 라는 id를 가진 빈으로 등록되며, 해당 빈은 DI를 통하여 또 다른 설정파일 또는 컨트롤러 등에서 사용할 수 있다
스프링 에서는 xml 설정 뿐만이 아니라 EmbeddedDatabaseBuilder API에서 제공하는 함수를 사용하여 H2의 인스턴스를 생성 시킬 수 있다.
database = new EmbeddedDatabaseBuilder().addDefaultScripts().build();