我有一个Spring引导项目,当从Eclipse启动时可以正确加载postgres,但是当由windows命令窗口启动时,会加载测试数据库。
当我使用java -jar happy_list-0.1.0.jar
从cmd启动应用程序时出现此错误(我删除了部分堆栈跟踪):
引起:java.lang.IllegalStateException:测试数据库的驱动程序 type [HSQL]在类路径中不可用 引起:java.lang.ClassNotFoundException:org.hsqldb.jdbcDriver
我没有测试的任何测试或配置。它必须是Spring启动完成的一些自动配置,但我不明白为什么它在从eclipse或windows cmd运行时表现不同。
PersistentContext:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = { "happy_listing" })
public class PersistentContext {
}
App.java:
@SpringBootApplication
@EnableAutoConfiguration
@Configuration
@ComponentScan(basePackages = { "happy_listing" })
@Import({ PersistentContext.class })
public class App {
@Configuration
@PropertySource("classpath:application.properties")
static class ApplicationProperties {
}
public static void main(String... args) {
SpringApplication.run(App.class, args);
}
}
Build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE")
classpath('se.transmode.gradle:gradle-docker:1.2')
}
}
group = 'marcandregirard'
apply plugin: 'java'
apply plugin: 'spring-boot'
apply plugin: 'docker'
jar {
baseName = 'happy_list'
version = '0.1.0'
}
springBoot {
mainClass = "happy_listing.App"
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.slf4j:slf4j-api:1.7.13'
compile 'javax.ws.rs:javax.ws.rs-api:2.0'
compile 'org.springframework:spring-core'
compile 'org.springframework:spring-context'
compile 'org.springframework:spring-jdbc'
compile 'org.springframework.boot:spring-boot-starter-web'
compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.1.1'
compile 'org.springframework.data:spring-data-jpa:1.9.2.RELEASE'
compile 'org.hibernate:hibernate-entitymanager'
compile 'org.postgresql:postgresql:9.4-1206-jdbc42'
compile 'org.springframework:spring-web'
testCompile 'junit:junit:4.12'
}
task buildDocker(type: Docker, dependsOn: build) {
push = true
applicationName = jar.baseName
dockerfile = file('src/main/docker/Dockerfile')
doFirst {
copy {
from jar
into stageDir
}
}
}
我使用命令gradle build buildDocker
创建了jar,它创建了jar和图像以在Docker中运行。
从Eclipse开始时,一切正常。
答案 0 :(得分:3)
对于初学者,我会开始清理你的依赖项而不是所有单独的jar文件使用适当的启动器。
dependencies {
compile 'javax.ws.rs:javax.ws.rs-api:2.0'
compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.1.1'
compile 'org.postgresql:postgresql:9.4-1206-jdbc42'
testCompile 'org.springframework.boot:spring-boot-starter-test'
}
接下来看起来你正在尝试进行大量的手动配置@SpringBootApplication
已经暗示其他3和Spring Boot已加载application.properties
。删除
@SpringBootApplication
public class App {
public static void main(String... args) {
SpringApplication.run(App.class, args);
}
}
删除你已经为Spring Boot完成的PersistenceContext
课程。
清理完类和依赖项后,请确保没有遗留旧类。为此,执行Gradle clean
任务。 gradle clean
应该做到这一点。
因此,在删除课程时,请确保使用gradle clean build
代替普通gradle build
。