我正在尝试从spring-boot应用程序中使用Grails GORM,并且有一组与嵌入式数据库一起运行的测试。但是,我不能将代码移动到不同的数据库服务器(这是某些测试所必需的。)
在(http://spring.io/guides/gs/accessing-data-gorm/)的Spring Guide之后,我在src / main / resources / application.properties中有以下内容:
spring.datasource.intialize=false
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://10.0.0.2/mydb? useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=user
spring.datasource.password=password
我对gradle依赖项有以下内容,包括Grails GORM的项目:
dependencies {
compile(
"org.slf4j:slf4j-api:$slf4jVersion",
"org.springframework.boot:spring-boot-starter-web",
"org.springframework.boot:spring-boot-starter-jpa",
"org.grails:gorm-hibernate4-spring-boot:1.0.0.RELEASE",
"com.h2database:h2:$h2Version",
"org.apache.tomcat:tomcat-jdbc:8.0.8"
)
runtime(
"ch.qos.logback:logback-access:1.1.2",
"ch.qos.logback:logback-classic:1.1.2",
"mysql:mysql-connector-java:5.1.30")
testCompile(
"junit:junit",
'org.spockframework:spock-core:0.7-groovy-2.0' )
}
运行测试,日志包含Creating embedded database 'testdb'
。无论我是将属性更改为包含spring.datasource.intialize=true
还是将依赖关系更改为spring-boot-starter-web
(或两者),都会出现这种情况。
Spring Boot的文档似乎暗示将属性添加到application.properties应该激活另一个数据库。 Spring boot did not create datasource的答案似乎暗示确保tomcat和驱动程序在类路径上应该解决问题,但我检查路径并使用spring-boot-starter-web
和上面的依赖关系,两者都在这样的类路径似乎无法解决问题。
自动配置报告(有点长)如下。它似乎报告找不到类org.apache.tomcat.jdbc.pool.DataSource。然而,它显示在我的IDE中的类路径中,并且应该依赖于依赖项。
=========================
AUTO-CONFIGURATION REPORT
=========================
Positive matches:
-----------------
MessageSourceAutoConfiguration
- @ConditionalOnMissingBean (types: org.springframework.context.MessageSource; SearchStrategy: all) found no beans (OnBeanCondition)
PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer
- @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) found no beans (OnBeanCondition)
DataSourceAutoConfiguration
- @ConditionalOnClass classes found: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)
DataSourceAutoConfiguration.EmbeddedConfiguration
- embedded database H2 detected (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
- @ConditionalOnMissingBean (types: javax.sql.DataSource; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourceAutoConfiguration.JdbcTemplateConfiguration
- existing auto database detected (DataSourceAutoConfiguration.DatabaseCondition)
DataSourceAutoConfiguration.JdbcTemplateConfiguration#jdbcTemplate
- @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourceAutoConfiguration.JdbcTemplateConfiguration#namedParameterJdbcTemplate
- @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) found no beans (OnBeanCondition)
DataSourceTransactionManagerAutoConfiguration
- @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransactionManager (OnClassCondition)
DataSourceTransactionManagerAutoConfiguration.TransactionManagementConfiguration
- @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) found no beans (OnBeanCondition)
JmxAutoConfiguration
- @ConditionalOnClass classes found: org.springframework.jmx.export.MBeanExporter (OnClassCondition)
- SpEL expression on org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration: ${spring.jmx.enabled:true} (OnExpressionCondition)
- @ConditionalOnMissingBean (types: org.springframework.jmx.export.MBeanExporter; SearchStrategy: all) found no beans (OnBeanCondition)
Negative matches:
-----------------
RabbitAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.amqp.rabbit.core.RabbitTemplate,com.rabbitmq.client.Channel (OnClassCondition)
AopAutoConfiguration
- required @ConditionalOnClass classes not found: org.aspectj.lang.annotation.Aspect,org.aspectj.lang.reflect.Advice (OnClassCondition)
BatchAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.batch.core.launch.JobLauncher (OnClassCondition)
JpaRepositoriesAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.data.jpa.repository.JpaRepository (OnClassCondition)
MongoRepositoriesAutoConfiguration
- required @ConditionalOnClass classes not found: com.mongodb.Mongo,org.springframework.data.mongodb.repository.MongoRepository (OnClassCondition)
DataSourceAutoConfiguration.DbcpConfiguration
- org.apache.commons.dbcp.BasicDataSource DataSource class not found (DataSourceAutoConfiguration.BasicDatabaseCondition)
DataSourceAutoConfiguration.TomcatConfiguration
- org.apache.tomcat.jdbc.pool.DataSource DataSource class not found (DataSourceAutoConfiguration.TomcatDatabaseCondition)
DataSourceTransactionManagerAutoConfiguration#transactionManager
- @ConditionalOnMissingBean (names: transactionManager; SearchStrategy: all) found the following [transactionManager] (OnBeanCondition)
JmsTemplateAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.jms.core.JmsTemplate,javax.jms.ConnectionFactory (OnClassCondition)
DeviceResolverAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.mobile.device.DeviceResolverHandlerInterceptor,org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver (OnClassCondition)
MongoAutoConfiguration
- required @ConditionalOnClass classes not found: com.mongodb.Mongo (OnClassCondition)
MongoTemplateAutoConfiguration
- required @ConditionalOnClass classes not found: com.mongodb.Mongo,org.springframework.data.mongodb.core.MongoTemplate (OnClassCondition)
HibernateJpaAutoConfiguration
- did not find HibernateEntityManager class (HibernateJpaAutoConfiguration.HibernateEntityManagerCondition)
ReactorAutoConfiguration
- required @ConditionalOnClass classes not found: reactor.spring.context.config.EnableReactor (OnClassCondition)
RedisAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.data.redis.connection.lettuce.LettuceConnection,org.springframework.data.redis.core.RedisOperations,com.lambdaworks.redis.RedisClient (OnClassCondition)
FallbackWebSecurityAutoConfiguration
- SpEL expression on org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration: !${security.basic.enabled:true} (OnExpressionCondition)
SecurityAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.security.authentication.AuthenticationManager (OnClassCondition)
ThymeleafAutoConfiguration
- required @ConditionalOnClass classes not found: org.thymeleaf.spring4.SpringTemplateEngine (OnClassCondition)
DispatcherServletAutoConfiguration
- web application classes not found (OnWebApplicationCondition)
EmbeddedServletContainerAutoConfiguration
- web application classes not found (OnWebApplicationCondition)
HttpMessageConvertersAutoConfiguration
- required @ConditionalOnClass classes not found: org.springframework.http.converter.HttpMessageConverter (OnClassCondition)
MultipartAutoConfiguration
- required @ConditionalOnClass classes not found: javax.servlet.Servlet,org.springframework.web.multipart.support.StandardServletMultipartResolver (OnClassCondition)
ServerPropertiesAutoConfiguration
- web application classes not found (OnWebApplicationCondition)
WebMvcAutoConfiguration
- web application classes not found (OnWebApplicationCondition)
WebSocketAutoConfiguration
- required @ConditionalOnClass classes not found: javax.servlet.Servlet,org.apache.catalina.startup.Tomcat,org.springframework.web.socket.WebSocketHandler,org.apache.tomcat.websocket.server.WsSci (OnClassCondition)
答案 0 :(得分:0)
修复结果很难找到,但并不困难。诀窍是在org.apache.tomcat:tomcat-jdbc:
的适当版本上添加运行时依赖项。对于Java 6,我使用了7.0.54。对于Java 7或8,请使用8.0.8。请注意,7.系列未列为Maven Central的最新版本。
显然,这种依赖关系不是由web启动器引入的,因此必须添加。
发现这一点的困难之处在于,如果由于某种原因(例如不兼容的JRE)无法加载类,它将无法找到它。我在尝试显式加载类时才发现这个问题。