mg4377娱乐娱城官网_mg4377娱乐手机版_www.mg4377.com

【mg4377娱乐手机版】Spring使用内存数据库二,在

时间:2019-10-05 15:23来源:mg4377娱乐手机版
在伊始化数据库和导入数据一文中,大家探讨了在SpringBoot项目中怎么着制造数据库的表结构,以及怎么着往数据库中填充开端数据。在程序开拓进度中时时会在条件布署上浪费广大时辰

在伊始化数据库和导入数据一文中,大家探讨了在Spring Boot项目中怎么着制造数据库的表结构,以及怎么着往数据库中填充开端数据。在程序开拓进度中时时会在条件布署上浪费广大时辰,举个例子在三个设有数据库组件的应用程序中,测量检验用例运转从前必得确定保障数据库中的表结构科学,而且已经填入初叶数据。对于能够的测验用例,还亟需保险数据库在进行用例前后状态不改换。

在支付测量试验进程中,由于种种原因,连接Mysql或许Oracle实行测量检验或然会发生众多难点,举例网络原因,线上数据库争执以及质量等难点,那时候如若能将数据库跑在内部存款和储蓄器中,会省众多难题
下边记录一份H2内部存储器数据库的利用方法

  一时候为了做些测量检验需求创建数据库及有关表,安装MySQL等轻量数据库固然轻松但依然多少辛勤?并且用于本人暂且测量试验的数据库对象平时不会被频仍选取,照旧浪费?内部存款和储蓄器数据库结合ORM能够很好消除这几个主题材料。

  在上篇《【mg4377娱乐手机版】Spring使用内存数据库二,在测验中动用内部存款和储蓄器数据库。Spring 使用内存数据库》中我们利用Hibernate作为ORM的框架,直接调用Hibernate的API进行有关的长久化操作,但在骨子里项目中,可能会出于集团分明等原因须求统一使用JPA接口来扩充长久化,而JPA的兑现能够灵活计划,制止对第三方JPA完成的过度重视,那样可能会捐躯第三方JPA达成带来的片段附加优化和特征,但着实防止了对其借助,本文将改成《Spring 使用内部存款和储蓄器数据库》德姆o的落到实处,使其使用JPA规范接口进行长久化操作,而JPA完结能够布置为Hibernate或EclipseLink协助。

在前头使用的底蕴上,schema.sql文件中含有成立数量库表结构的SQL语句、data.sql文本中隐含填充初步数据的SQL语句。那篇小说将//todo

1.引进重视,scope为test范围

     <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
           <scope>test</scope>
        </dependency>

  H2,Derby,HSQLDB 都以很好的内部存款和储蓄器数据库,我们可以依照本人的内需选拔:

  第一步:将HibernateConfiguration类修改为JpaConfiguration类

  • 在src/test/resources目录下成立test-data.sql文本,用于导入测验数据

2.application.yml 配置数据源

spring:
  datasource:
    ## 这里和引入mysql驱动没什么区别
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:test
   ## 由于数据库会跑在内存中,所以程序需要在启动的时候在内存中创建数据库,这里指定数据库的表结构(schema)和数据信息 (data),语法和mysql大同小异
    schema: classpath:db/schema.sql
    data: classpath:db/data.sql

透过地点两步的布局,就足以一向在前后相继中无感知(和平运动用Mysql时候同样)使用H2内存数据库了

  H2 Derby HSQLDB MySQL PostgreSQL
Pure Java Yes Yes Yes No No
Memory Mode Yes Yes Yes No No
Encrypted Database Yes Yes Yes No No
ODBC Driver Yes No No Yes Yes
Fulltext Search Yes No No Yes Yes
Multi Version Concurrency Yes No Yes Yes Yes
Footprint (jar/dll size) ~1 MB ~2 MB ~1 MB ~4 MB ~6 MB
 1 @Configuration
 2 public class JpaConfiguration {
 3     @Autowired
 4     private DataSource dataSource;
 5     @Bean
 6     public Map<String, Object> jpaProperties() {
 7         Map<String, Object> props = new HashMap<String, Object>();
 8         //Hibernate JPA properties
 9             
10         /*props.put("hibernate.dialect", H2Dialect.class.getName());
11         props.put("hibernate.cache.provider_class", HashtableCacheProvider.class.getName());*/
12             
13         //EclipseLink JPA properties
14             
15         props.put("eclipselink.weaving", "false");    
16             
17         return props;
18     }
19     @Bean
20     public JpaVendorAdapter jpaVendorAdapter() {      
21         //Hibernate JPA Vendor Adapter
22         /*AbstractJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();*/
23             
24         //EclipseLink JPA Vendor Adapter
25         AbstractJpaVendorAdapter jpaVendorAdapter = new EclipseLinkJpaVendorAdapter();
26              
27         //Common vendor settings
28         jpaVendorAdapter.setShowSql(false);
29         jpaVendorAdapter.setGenerateDdl(true);
30         jpaVendorAdapter.setDatabase(Database.H2);//指定数据库为 H2
31              
32         return jpaVendorAdapter;      
33     }
34     @Bean
35     public PlatformTransactionManager transactionManager() {
36         return new JpaTransactionManager( localContainerEntityManagerFactoryBean().getObject() );
37     }
38     @Bean
39     public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean() {
40         LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
41         lef.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
42         lef.setDataSource(this.dataSource);
43         lef.setJpaPropertyMap(this.jpaProperties());
44         lef.setJpaVendorAdapter(this.jpaVendorAdapter());
45         return lef;
46     }
47         
48     /**
49      * 设置数据源,可以指定类型为Derby或HSQLDB
50      * @return
51      */
52     @Bean
53     public DataSource dataSource(){
54         EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
55         builder.setType(EmbeddedDatabaseType.H2);
56         return builder.build();
57     }
58 }

  Spring已经对利用内存数据库提供很周详的协理:

  第二步:修改OrderPersistenceTests类

INSERT INTO author(first_name, last_name) VALUES ("Greg", "Turnquist");INSERT INTO book(isbn, title, author, publisher) VALUES ('9781-78439-302-1', 'Learning Spring Boot', 2, 1)

  配置类:

  将org.hibernate.Session类的API操作修改为javax.persistence.EntityManager类的API

编辑:mg4377娱乐手机版 本文来源:【mg4377娱乐手机版】Spring使用内存数据库二,在

关键词: 数据库 内存 测试中 Spring技术