H2 junit测试没有创建表而没有填充数据

时间:2018-03-15 15:20:02

标签: spring hibernate jpa spring-boot h2

尝试使用H2作为单元测试的测试数据库。该应用程序工作但无法在src / test / resources中找到schema-h2.sql文件。错误:

  

ServletContext资源[/schema-h2.sql]由" spring.datasource.schema'定义。不存在

我可以在src / test / resources / application.properties中以这种方式定义它并且它不会抛出任何错误......但是,它似乎是基于我的Entity对象创建表。我可以这样说,因为当schema-h2.sql中的表定义没有时,它会将主键放在那里。配置下面的东西......

  

文件:/workspace/DatabaseAdapter/src/test/resources/schema-h2.sql

schema-h2.sql的内容:

    CREATE TABLE translog
(
   objectid numeric(18,0),
   translog_type varchar(3),
   primary_relation numeric(18,0),
   transaction_type int,
   ADB_SUBJECT varchar(255),
   ADB_SEQUENCE int NOT NULL,
   ADB_SET_SEQUENCE int,
   ADB_TIMESTAMP datetime,
   ADB_OPCODE int NOT NULL,
   ADB_UPDATE_ALL int,
   ADB_REF_OBJECT varchar(64),
   ADB_L_DELIVERY_STATUS char(1),
   ADB_L_CMSEQUENCE decimal(28,0),
   ADB_TRACKINGID varchar(40)
);

实体:

    @Entity
@Table(name="translog")
public class Translog {

    @Id
    @Column(name="objectid")
    private Long objectid;
    @Column(name="translog_type")
    private String translogType;
    @Column(name="primary_relation")
    private Long primaryRelation;
    @Column(name="transaction_type")
    private Integer transactionType;
    @Column(name="ADB_SUBJECT")
    private String adbSubject;
    @Column(name="ADB_SEQUENCE")
    private Integer adbSequence;
    @Column(name="ADB_SET_SEQUENCE")
    private Integer adbSetSequence;
    @Column(name="ADB_TIMESTAMP")
    private Date adbTimestamp;
    @Column(name="ADB_OPCODE")
    private Integer adbOpcode;
    @Column(name="ADB_UPDATE_ALL")
    private Integer adbUpdateAll;
    @Column(name="ADB_REF_OBJECT")
    private String adbRefObject;
    @Column(name="ADB_L_DELIVERY_STATUS")
    private String adbLDeliveryStatus;
    @Column(name="ADB_L_CMSEQUENCE")
    private BigInteger adbLCmsequence;
    @Column(name="ADB_TRACKINGID")
    private String adbTrackingid;

    ...getters ane setters

属性:

    spring.datasource.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.platform=h2
spring.datasource.schema=schema-h2.sql
spring.datasource.data=data-h2.sql
#spring.datasource.schema=file:/workspace/DatabaseAdapter/src/test/resources/schema-h2.sql
#spring.datasource.data=file:/workspace/DatabaseAdapter/src/test/resources/data-h2.sql
spring.jpa.hibernate.ddl-auto=none
#spring.datasource.initialize=true
spring.jpa.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.show-sql=true

要求它找到h2设置时的堆栈跟踪:

        2018-03-15 09:50:13.278 ERROR 13944 --- [           main] o.s.b.SpringApplication                  : Application startup failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceInitializer': Invocation of init method failed; nested exception is org.springframework.boot.context.config.ResourceNotFoundException: ServletContext resource [/schema-h2.sql] defined by 'spring.datasource.schema' does not exist
    ...cut out for brevity
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceInitializer': Invocation of init method failed; nested exception is org.springframework.boot.context.config.ResourceNotFoundException: ServletContext resource [/schema-h2.sql] defined by 'spring.datasource.schema' does not exist
    ...cut out for brevity
    ... 52 more

...

2018-03-15 10:12:10.094  INFO 10040 --- [           main] o.s.j.d.i.ScriptUtils                    : Executing SQL script from URL [file:/workspace/DatabaseAdapter/src/test/resources/schema-h2.sql]
2018-03-15 10:12:10.102  INFO 10040 --- [           main] o.s.j.d.i.ScriptUtils                    : Executed SQL script from URL [file:/workspace/DatabaseAdapter/src/test/resources/schema-h2.sql] in 8 ms.
2018-03-15 10:12:10.105  INFO 10040 --- [           main] o.s.j.d.i.ScriptUtils                    : Executing SQL script from URL [file:/workspace/DatabaseAdapter/src/test/resources/data-h2.sql]
2018-03-15 10:12:10.124  INFO 10040 --- [           main] o.s.j.d.i.ScriptUtils                    : Executed SQL script from URL [file:/workspace/DatabaseAdapter/src/test/resources/data-h2.sql] in 19 ms.
2018-03-15 10:12:10.293  INFO 10040 --- [           main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2018-03-15 10:12:10.318 DEBUG 10040 --- [           main] o.h.j.i.u.LogHelper                      : PersistenceUnitInfo [
    name: default
    persistence provider classname: null
    classloader: sun.misc.Launcher$AppClassLoader@18b4aac2
    excludeUnlistedClasses: true
    JTA datasource: null
    Non JTA datasource: org.apache.tomcat.jdbc.pool.DataSource@3ea75b05{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=org.h2.Driver; maxActive=100; maxIdle=100; minIdle=10; initialSize=10; maxWait=30000; testOnBorrow=true; testOnReturn=false; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=false; testOnConnect=false; password=********; url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1; username=sa; validationQuery=SELECT 1; validationQueryTimeout=-1; validatorClassName=null; validationInterval=3000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAbandoned=false; connectionProperties=null; initSQL=null; jdbcInterceptors=null; jmxEnabled=true; fairQueue=true; useEquals=true; abandonWhenPercentageFull=0; maxAge=0; useLock=false; dataSource=null; dataSourceJNDI=null; suspectTimeout=0; alternateUsernameAllowed=false; commitOnReturn=false; rollbackOnReturn=false; useDisposableConnectionFacade=true; logValidationErrors=false; propagateInterruptState=false; ignoreExceptionOnPreLoad=false; useStatementFacade=true; }
    Transaction type: RESOURCE_LOCAL
    PU root URL: file:/C:/workspace/DatabaseAdapter/target/test-classes/
    Shared Cache Mode: UNSPECIFIED
    Validation Mode: AUTO
    Jar files URLs []
    Managed classes names [
        com.ezcorp.databaseadapter.domain.Translog]
    Mapping files names []
    Properties []

.......

2018-03-15 10:12:11.306 DEBUG 10040 --- [           main] o.h.l.p.b.s.LoadPlanTreePrinter          : LoadPlan(entity=com.ezcorp.databaseadapter.domain.Translog)
    - Returns
       - EntityReturnImpl(entity=com.ezcorp.databaseadapter.domain.Translog, querySpaceUid=<gen:0>, path=com.ezcorp.databaseadapter.domain.Translog)
    - QuerySpaces
       - EntityQuerySpaceImpl(uid=<gen:0>, entity=com.ezcorp.databaseadapter.domain.Translog)
          - SQL table alias mapping - translog0_
          - alias suffix - 0_
          - suffixed key columns - {objectid1_0_0_}

.......

2018-03-15 10:12:14.728  INFO 10040 --- [           main] c.e.d.DbAdapterApplicationTests          : Started DbAdapterApplicationTests in 8.409 seconds (JVM running for 9.466)
2018-03-15 10:12:14.785 DEBUG 10040 --- [           main] c.e.d.d.TranslogRepository               : [DB_ADAPT] REPOSITORY.getTranslogs - gather data from ezsystem for processing: sql=select TOP 2 * from p_t_ezsystem_translog where ADB_L_DELIVERY_STATUS = 'N' order by ADB_TIMESTAMP ASC
2018-03-15 10:12:14.795 DEBUG 10040 --- [           main] c.e.d.d.TranslogRepository               : [DB_ADAPT] REPOSITORY.getTranslogs - got (0) records
2018-03-15 10:12:14.821  INFO 10040 --- [       Thread-7] o.s.c.n.e.InstanceInfoFactory            : Setting initial instance status as: STARTING
2018-03-15 10:12:14.833  INFO 10040 --- [       Thread-7] c.n.e.EurekaDiscoveryClientConfiguration : Unregistering application unknown with eureka with status DOWN
2018-03-15 10:12:14,917 Thread-7 WARN Unable to register Log4j shutdown hook because JVM is shutting down. Using SimpleLogger

1 个答案:

答案 0 :(得分:0)

我只是想发表一个发现。自从实施Jaiwo99的建议以来,我认为我没有问题。我发现通过更改查询...非常简单:

  

从translog中选择*

由于我得到了这个结果,我的问题显然不是配置,而是H2对SQL与SQL Server的比较方式。我应该先检查一下: - )