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

3

我创建了一个Java项目,将使用Spring Boot和Gradle。我希望配置不同环境的配置文件(例如,在本地机器上进行开发,在服务器上进行集成测试等)。在开发环境中,我将使用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文件的dependencies closure。
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')
    }
}

这次Spring Boot正确启动了。但是我不太喜欢这个解决方案,因为我必须使用Gradle来部分处理配置文件。我想知道是否有一种方法可以配置Spring Boot,使得配置文件完全在其中管理,可以在开发环境中解析h2,在系统测试环境中解析sqlserver,而让Gradle不知道Spring的配置。

如何解决这个问题?


为您正在使用的数据源实现显式指定 spring.datasource.type,以便为您的 systemtest 配置文件跳过数据源检测(当检测正在进行时,嵌入式具有优先权)。 - M. Deinum
我尝试查看Spring文档,但无法找到可以分配给spring.datasource.type的值。文档相当模糊。我尝试设置一个Datasource类,但它没有起作用。 - Evelino Bomitali
你应该设置一个数据源类,例如 com.zaxxer.hikari.HikariDataSource - M. Deinum
1个回答

0

根据@M. Deinum的建议,尝试配置数据源/ Spring配置文件,以防止在使用不同的数据库时将数据源配置为H2,因此最好不要根据DB产品使用不同的工件/二进制文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接