我试图配置一个没有数据库的项目,并在下一个错误时失败:
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。
任何想法或线索?提前谢谢。
答案 0 :(得分:0)
尝试你的共享依赖项,我看起来一切正常(应用程序启动没有问题),正如预期的那样,不需要@EnableAutoConfiguration
来排除DataSourceAutoConfiguration,因为你在路径中没有DataSource类(至少与那些依赖)。所以我相信
gradle clean build
2.0.0.M6
和spring boot 1.5.x
DataSource
类添加到类路径。答案 1 :(得分:0)
我遇到了同样的问题(使用Spring-Boot 2.0.0.RELEASE ):我有一个没有数据库的Spring-Boot包。它只提供静态文件。
为了使其工作(而不是在数据库自动配置期间崩溃),我用替换注释@SpringBootApplication以下两个:
@SpringBootConfiguration
@EnableAutoConfiguration
这使得服务器在没有JPA- / JDBC依赖的情况下启动,并且在application.properties文件中没有任何与数据库相关的配置属性。