从cmd运行时的Spring启动加载测试数据库

时间:2016-05-23 17:50:04

标签: java eclipse spring gradle spring-boot

我有一个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开始时,一切正常。

1 个答案:

答案 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