使用Spring引导配置文件和Gradle管理依赖项

时间:2017-05-02 09:32:38

标签: java gradle spring-boot

我创建了一个将使用spring boot和Gradle的java项目。我想为不同的环境配置配置文件(在本地计算机上进行开发,在服务器场机器上进行集成测试的systemtest等)。我会在内存数据库中使用h2作为开发环境,而在系统测试环境中使用SqlServer。在build.gradle中,我定义了以下依赖项

dependencies {
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-boot-starter-web-services")
    compile('org.springframework.boot:spring-boot-starter-actuator')
    runtime('com.h2database:h2:1.4.195')
    runtime('com.microsoft.sqlserver:mssql-jdbc')
}

我创建了一个application.yml文件,application-development.yml和application-systemtest.yml,其中我将放置常见属性和特定于环境的属性。文件application-systemtest.yml定义了sql server

的连接参数
spring:
  datasource:
    url: jdbc:sqlserver://<host>,1433;databaseName=MYDB
    username: myuser
    password: mypass
    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
  jpa:
    show-sql: true
    hibernate:
      dialect: org.hibernate.dialect.SQLServer2012Dialect

我还会创建一个超级jar并选择配置文件作为启动参数,即

java -Dspring.profiles.active=systemtest -jar <my uber jar>

开发配置文件很好,我在内存数据库中运行h2。尝试systemtest配置文件时,spring boot无法加载上下文并失败。这是由spring boot发现h2依赖并尝试配置application-systemtest.yml中定义的数据源引起的。

所以我修改了build.gradle依赖关系

def profile = project.findProperty('spring.profiles.active')

dependencies {
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-boot-starter-web-services")
    compile('org.springframework.boot:spring-boot-starter-actuator')
    if (profile == 'development') {
        runtime('com.h2database:h2:1.4.195')
    } else {
        runtime('com.microsoft.sqlserver:mssql-jdbc')
    }
}

这次春季启动正确启动。不太喜欢这个解决方案,因为我必须使用Gradle处理配置文件配置。我想知道是否有一种方法可以配置spring boot,以便在自身内部完全管理配置文件,在开发环境中解析h2,在systemtest环境中解析sqlserver,让Gradle不知道spring配置文件。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

根据数据库产品,建议使用不同的工件/二进制文件是不可取的。尝试按照@M的建议配置数据源/ Spring配置文件。 Deinum用于防止在使用其他数据库时将数据源配置为H2。