0

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

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  {

这没有任何意义,因为就像尝试在无数据库应用程序中读取 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”可以工作,但为无数据库项目添加数据库库对我来说没有意义。

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

4

2 回答 2

1

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

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

@SpringBootConfiguration
@EnableAutoConfiguration

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

于 2018-03-24T05:04:59.723 回答
0

只需尝试您的共享依赖项,我一切看起来都很好(应用程序开始时没有问题),正如预期的那样,不需要@EnableAutoConfiguration排除 DataSourceAutoConfiguration 因为路径中没有 DataSource 类(至少具有这些依赖项)。所以我相信

  1. 您在系统/IDE 中刷新依赖项时遇到问题,请尝试gradle clean build
  2. 您正在使用错误的依赖组合 spring-cloud-starter-config 例如2.0.0.M6与 spring boot1.5.x
  3. 您有另一个依赖项将DataSource类添加到类路径。
  4. 您的资源文件中有资源服务器数据源配置属性。
于 2018-02-15T10:30:03.817 回答