尝试使用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
答案 0 :(得分:0)
我只是想发表一个发现。自从实施Jaiwo99的建议以来,我认为我没有问题。我发现通过更改查询...非常简单:
从translog中选择*
由于我得到了这个结果,我的问题显然不是配置,而是H2对SQL与SQL Server的比较方式。我应该先检查一下: - )