无数据库运行Spring Boot失败

时间:2018-02-15 09:21:48

标签: java spring spring-boot no-database

我试图配置一个没有数据库的项目,并在下一个错误时失败:

Caused by: java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseType
at org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnection.<clinit>(EmbeddedDatabaseConnection.java:49) ~[spring-boot-autoconfigure-1.5.10.RELEASE.jar:1.5.10.RELEASE]
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.<init>(DataSourceProperties.java:155) ~[spring-boot-autoconfigure-1.5.10.RELEASE.jar:1.5.10.RELEASE]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_161]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_161]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_161]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_161]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
... 19 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_161]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_161]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) ~[na:1.8.0_161]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_161]
... 26 common frames omitted

在我的SpringBootApplication类中,我有下一个配置:

@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class MySpringBootApplication  {

它没有意义,因为就像尝试在No Database应用程序中读取DataSourceProperties类一样。

我正在使用gradle和下一个依赖项:

compile "io.springfox:springfox-swagger2:${swaggerVersion}",
        "org.springframework.boot:spring-boot-starter-actuator",
        "org.springframework.cloud:spring-cloud-starter-config",
        "org.springframework.boot:spring-boot-starter-web",
      //"org.springframework:spring-jdbc",
        "io.fabric8:spring-cloud-starter-kubernetes:${springCloudKubernetes}",
        "ma.glasnost.orika:orika-core:${orikaVersion}",
        'org.projectlombok:lombok:1.16.20'

testCompile "org.springframework.boot:spring-boot-starter-test",
        'com.github.sbrannen:spring-test-junit5:1.0.2',
        'org.apiguardian:apiguardian-api:1.0.0',

        "org.junit.jupiter:junit-jupiter-api:${junitVersion}"
testRuntime "org.junit.jupiter:junit-jupiter-engine:${junitVersion}",
        "org.junit.platform:junit-platform-launcher:1.0.2"

testAgent("org.jacoco:org.jacoco.agent:${jacocoVersion}:runtime")

如果我添加“org.springframework:spring-jdbc”,但对我来说没有意义为无数据库项目添加数据库lib。

任何想法或线索?提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试你的共享依赖项,我看起来一切正常(应用程序启动没有问题),正如预期的那样,不需要@EnableAutoConfiguration来排除DataSourceAutoConfiguration,因为你在路径中没有DataSource类(至少与那些依赖)。所以我相信

  1. 您在系统/ IDE中刷新依赖项时遇到问题,请尝试gradle clean build
  2. 你正在使用错误的依赖关系组合spring-cloud-starter-config,例如2.0.0.M6和spring boot 1.5.x
  3. 您有另一个依赖项,将DataSource类添加到类路径。
  4. 资源服务器数据源配置属性的资源文件中包含。

答案 1 :(得分:0)

我遇到了同样的问题(使用Spring-Boot 2.0.0.RELEASE ):我有一个没有数据库的Spring-Boot包。它只提供静态文件。

为了使其工作(而不是在数据库自动配置期间崩溃),我用替换注释@SpringBootApplication以下两个:

@SpringBootConfiguration
@EnableAutoConfiguration

这使得服务器在没有JPA- / JDBC依赖的情况下启动,并且在application.properties文件中没有任何与数据库相关的配置属性。