春に埋め込まれたデータベースの例
このチュートリアルでは、SpringフレームワークでHSQL、H2、Derbyなどの組み込みデータベースエンジンを設定するいくつかの例を紹介します。
使用される技術:
-
Spring 4.1.6.RELEASE
-
jUnit 4.1.2
-
Maven 3
テスト済みの組み込みデータベース:
-
HSQLDB 2.3.2
-
H2 1.4.187
-
ダービー10.11.1.1
組み込みデータベースのコンセプトは、開発フェーズでは軽量で高速で、開始時間が短く、テスト容易性が高く、構成が簡単で、開発者がデータベースにデータソースを構成する方法ではなく、開発に集中できるため、またはわずかなコード行をテストするために重量のあるデータベースを起動する時間を無駄にします。
__P.Sこの組み込みデータベース機能は、Spring 3以降に利用可能です。
1.プロジェクトの依存関係
組み込みデータベースの機能は
spring-mvc`に含まれています。たとえば、HSQL組み込みデータベースを起動するには、 `spring-mvc`と
hsqldb`の両方をインクルードする必要があります。
pom.xml
<properties> <spring.version>4.1.6.RELEASE</spring.version> <hsqldb.version>2.3.2</hsqldb.version> <dbh2.version>1.4.187</dbh2.version> <derby.version>10.11.1.1</derby.version> </properties> <dependencies> <!-- Spring JDBC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- HyperSQL DB --> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>${hsqldb.version}</version> </dependency> <!-- H2 DB --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>${dbh2.version}</version> </dependency> <!-- Derby DB --> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>${derby.version}</version> </dependency> </dependencies>
2. Spring XMLの組み込みデータベース
例:Spring XMLを使用して組み込みデータベースを作成し、いくつかのスクリプトを使用してテーブルを作成し、データを挿入する例。 Springは `id`タグの値を使用してデータベース名を作成します。以下の例では、データベース名は「dataSource」になります。
2.1 HSQLの例。
<jdbc:embedded-database id="dataSource" type="HSQL"> <jdbc:script location="classpath:db/sql/create-db.sql"/> <jdbc:script location="classpath:db/sql/insert-data.sql"/> </jdbc:embedded-database>
2.2 H2の例。
<jdbc:embedded-database id="dataSource" type="H2"> <jdbc:script location="classpath:db/sql/create-db.sql"/> <jdbc:script location="classpath:db/sql/insert-data.sql"/> </jdbc:embedded-database>
2.3 Derbyの例
<jdbc:embedded-database id="dataSource" type="DERBY"> <jdbc:script location="classpath:db/sql/create-db.sql"/> <jdbc:script location="classpath:db/sql/insert-data.sql"/> </jdbc:embedded-database>
次の「JDBCドライバ接続」が作成されます。
-
HSQL –
jdbc:hsqldb:mem:dataSource
-
H2 –
jdbc:h2:mem:dataSource
-
DERBY –
jdbc:derby:memory:dataSource
3. Springコードの組み込みデータベース
組み込みデータベースをプログラムで作成する例`EmbeddedDatabaseBuilder.setName()`でデータベース名が定義されていない場合、Springはデフォルトのデータベース名 “testdb”を割り当てます。
import javax.sql.DataSource; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;//... @Bean public DataSource dataSource() { //no need shutdown, EmbeddedDatabaseFactoryBean will take care of this EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); EmbeddedDatabase db = builder .setType(EmbeddedDatabaseType.HSQL)//.H2 or .DERBY .addScript("db/sql/create-db.sql") .addScript("db/sql/insert-data.sql") .build(); return db; }
@ComponentScan({ "com.mkyong" }) @Configuration public class SpringRootConfig { @Autowired DataSource dataSource; @Bean public JdbcTemplate getJdbcTemplate() { return new JdbcTemplate(dataSource); }
次の「JDBCドライバ接続」が作成されます。
-
HSQL –
jdbc:hsqldb:mem:testdb
-
H2 –
jdbc:h2:mem:testdb
-
DERBY –
jdbc:derby:memory:testdb
ユニットテスト
組み込みデータベースを使用してDAOをテストするための簡単な単体テストの例。
4.1テーブルと挿入データを作成するためのSQLスクリプト。
create-db.sql
CREATE TABLE users ( id INTEGER PRIMARY KEY, name VARCHAR(30), email VARCHAR(50) );
insert-data.sql
INSERT INTO users VALUES (1, 'mkyong', '[email protected]'); INSERT INTO users VALUES (2, 'alex', '[email protected]'); INSERT INTO users VALUES (3, 'joel', '[email protected]');
4.2ユニットH2組み込みデータベースを使って `UserDao`をテストします。
UserDaoTest.java
package com.mkyong.dao; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import com.mkyong.model.User; public class UserDaoTest { private EmbeddedDatabase db; UserDao userDao; @Before public void setUp() { //db = new EmbeddedDatabaseBuilder().addDefaultScripts().build(); db = new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScript("db/sql/create-db.sql") .addScript("db/sql/insert-data.sql") .build(); } @Test public void testFindByname() { NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(db); UserDaoImpl userDao = new UserDaoImpl(); userDao.setNamedParameterJdbcTemplate(template); User user = userDao.findByName("mkyong"); Assert.assertNotNull(user); Assert.assertEquals(1, user.getId().intValue()); Assert.assertEquals("mkyong", user.getName()); Assert.assertEquals("[email protected]", user.getEmail()); } @After public void tearDown() { db.shutdown(); } }
完了しました。
5.組み込みデータベースのコンテンツを表示しますか?
埋め込みデータベースにアクセスしたり表示したりするには、特定の「データベースマネージャツール」は、組み込みデータベースを起動した同じSpringコンテナまたはJVMで開始する必要があります。さらに、「データベース・マネージャー・ツール」は組み込みデータベースBeanの後に開始する必要があります。豆のロード順序を識別するためにSpringのログを観察することでこの問題を解決するのが最適です。
“HSQLデータベースマネージャー”は良いツールです。ちょうど同じSpringコンテナで始まります。
@PostConstruct public void startDBManager() { //hsqldb //DatabaseManagerSwing.main(new String[]{ "--url", "jdbc:hsqldb:mem:testdb", "--user", "sa", "--password", "" }); //derby //DatabaseManagerSwing.main(new String[]{ "--url", "jdbc:derby:memory:testdb", "--user", "", "--password", "" }); //h2 //DatabaseManagerSwing.main(new String[]{ "--url", "jdbc:h2:mem:testdb", "--user", "sa", "--password", "" }); }
または `MethodInvokingBean`を使ったSpring XML
<bean depends-on="dataSource" class="org.springframework.beans.factory.config.MethodInvokingBean"> <property name="targetClass" value="org.hsqldb.util.DatabaseManagerSwing"/> <property name="targetMethod" value="main"/> <property name="arguments"> <list> <value>--url</value> <value>jdbc:derby:memory:dataSource</value> <value>--user</value> <value>sa</value> <value>--password</value> <value></value> </list> </property> </bean>
Figure:HSQLデータベースマネージャツール。組み込みデータベースにアクセスする.
6.接続プール
dbcp接続プールを接続する例
<!-- jdbc:hsqldb:mem:dataSource --> <jdbc:embedded-database id="dataSource" type="HSQL"> <jdbc:script location="classpath:db/sql/create-db.sql"/> <jdbc:script location="classpath:db/sql/insert-data.sql"/> </jdbc:embedded-database> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" > <constructor-arg ref="dbcpDataSource"/> </bean> <bean id="dbcpDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:mem:dataSource"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean>
ソースコードをダウンロードする
Github –
spring-embedded-database.git
参考文献
組み込みデータベースのサポート]。リンク://spring/spring-methodinvokingfactorybean-example/[Spring
MethodInvokingFactoryBeanの例]。リンク://spring/spring-view-content-of-hsqldb-embedded-database/[Spring
リンク://タグ/derby/[derby]リンク://タグ/h2/[h2]リンク://タグ/hsqldb/[hsqldb]
spring
spring
埋め込みデータベース