Grails spring boot在非web应用程序中创建非嵌入式数据源

Grails spring boot在非web应用程序中创建非嵌入式数据源,grails,gorm,spring-boot,Grails,Gorm,Spring Boot,我试图从一个spring启动应用程序中使用Grails GORM,并有一组与嵌入式数据库一起运行的测试。但是,我无法将代码移动到某些测试所需的其他数据库服务器 根据上的Spring指南,我在src/main/resources/application.properties中有以下内容: spring.datasource.intialize=false spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasourc

我试图从一个spring启动应用程序中使用Grails GORM,并有一组与嵌入式数据库一起运行的测试。但是,我无法将代码移动到某些测试所需的其他数据库服务器

根据上的Spring指南,我在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' )
}
运行测试,日志包含创建嵌入式数据库“testdb”。无论我是将属性更改为包含spring.datasource.initialize=true,还是将依赖项更改为spring boot starter web,或者两者兼而有之,情况都是如此

Spring引导的文档似乎暗示将属性添加到application.properties应该激活其他数据库。at的答案似乎意味着确保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)

结果很难找到解决办法,但并不难。诀窍是在org.apache.tomcat:tomcat jdbc:的适当版本上添加运行时依赖项。对于Java6,我使用了7.0.54。对于Java7或Java8,使用8.0.8。请注意,7。该系列未列为Maven Central的最新版本

显然,这个依赖项不是由web初学者引入的,因此必须添加


找到这个类的困难之处在于,如果该类由于某些原因(例如不兼容的JRE)不可加载,那么它会悄悄地找不到它。我只是在尝试显式加载类时才发现这个问题。

tomcat jdbc:7.0.54将由您已经拥有的JPA starter以传递方式添加,因此我对为什么不自动创建数据源感到不解。我认为它应该与Java6、7或8一起工作。你没有说你用的是什么。