Примеры встроенной базы данных Spring

Примеры встроенных баз данных Spring

hsql database manager tool

В этом руководстве мы покажем вам несколько примеров для настройки встроенных механизмов баз данных, таких как HSQL, H2 и Derby, в среде Spring.

Используемые технологии:

  1. Весна 4.1.6. ВЫПУСК

  2. jUnit 4.1.2

  3. Maven 3

Встроенные базы данных протестированы:

  1. HSQLDB 2.3.2

  2. H2 1.4.187

  3. Дерби 10.11.1.1

Концепция встроенной базы данных очень полезна на этапе разработки, поскольку они легкие, быстрые, быстрое начало работы, улучшают тестируемость, простоту настройки, позволяют разработчику больше сосредоточиться на разработке, а не на настройке источника данных для базы данных, или тратить время на запуск тяжелой базы данных, чтобы просто протестировать несколько строк кода.

P.S This embedded database feature has been available since Spring 3.

1. Зависимость проекта

Функции встроенной базы данных включены вspring-mvc. Например, чтобы запустить встроенную базу данных HSQL, вам нужно включить какspring-mvc, так иhsqldb.

pom.xml

    
        4.1.6.RELEASE
        2.3.2
        1.4.187
        10.11.1.1
    

    

        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        

        
        
            org.hsqldb
            hsqldb
            ${hsqldb.version}
        

        
        
            com.h2database
            h2
            ${dbh2.version}
        

        
        
            org.apache.derby
            derby
            ${derby.version}
        

    

2. Встроенная база данных в Spring XML

Пример создания встроенной базы данных с использованием Spring XML и инициализации некоторых сценариев для создания таблиц и вставки данных. Spring создаст имя базы данных, используя значение тегаid, в приведенных ниже примерах имя базы данных будет «dataSource».

2.1 HSQL example.

    
        
        
    

2.2 H2 example.

    
        
        
    

2.3 Derby example.

    
        
        
    

Будет создано следующее «Подключение драйвера JDBC»:

  1. HSQL -jdbc:hsqldb:mem:dataSource

  2. H2 -jdbc:h2:mem:dataSourceс

  3. ДЕРБИ -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.example" })
@Configuration
public class SpringRootConfig {

    @Autowired
    DataSource dataSource;

    @Bean
    public JdbcTemplate getJdbcTemplate() {
        return new JdbcTemplate(dataSource);
    }

Будет создано следующее «Подключение драйвера JDBC»:

  1. HSQL -jdbc:hsqldb:mem:testdb

  2. H2 -jdbc:h2:mem:testdbс

  3. ДЕРБИ -jdbc:derby:memory:testdb

4. Модульный тест

Простой пример модульного теста для тестирования DAO со встроенной базой данных.

4.1 SQL scripts to create table and insert data.

create-db.sql

CREATE TABLE users (
  id         INTEGER PRIMARY KEY,
  name VARCHAR(30),
  email  VARCHAR(50)
);

insert-data.sql

INSERT INTO users VALUES (1, 'example', '[email protected]');
INSERT INTO users VALUES (2, 'alex', '[email protected]');
INSERT INTO users VALUES (3, 'joel', '[email protected]');

4.2 Unit Test a UserDao with H2 embedded database.

UserDaoTest.java

package com.example.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.example.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("example");

        Assert.assertNotNull(user);
        Assert.assertEquals(1, user.getId().intValue());
        Assert.assertEquals("example", user.getName());
        Assert.assertEquals("[email protected]", user.getEmail());

    }

    @After
    public void tearDown() {
        db.shutdown();
    }

}

Готово.

5. Просмотреть содержимое встроенной базы данных?

Чтобы получить доступ или просмотреть встроенную базу данных, конкретный «инструмент диспетчера баз данных» должен запускаться с того же контейнера Spring или JVM, который запустил встроенную базу данных. Кроме того, «инструмент менеджера базы данных» должен запускаться после встроенного bean-компонента базы данных. Лучше всего решить эту проблему, наблюдая за журналом Spring для определения последовательности загрузки bean-компонентов.

«Менеджер баз данных 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", "" });

}

Или Spring XML сMethodInvokingBean


    
    
    
        
            --url
            jdbc:derby:memory:dataSource
            --user
            sa
            --password
            
        
    

Рис.: Инструмент менеджера баз данных HSQL, доступ к встроенной базе данных.

hsql database manager tool

6. Пул подключений

Пример подключения пула подключений dbcp.

    
    
        
        
    

    
        
    

    
        
        
        
        
    

Скачать исходный код