当前位置: 首页 > 知识库问答 >
问题:

使用spring boot profiles和Gradle管理依赖关系

洪开诚
2023-03-14

我创建了一个将使用spring boot和Gradle的java项目。我想为不同的环境配置配置文件(在我的本地机器上进行开发,在服务器场机器上进行集成测试的systemtest等)。我将在内存数据库中使用h2用于开发环境,将SqlServer用于systemtest环境。在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
java -Dspring.profiles.active=systemtest -jar <my uber jar>

开发概要文件开始良好,我运行在内存数据库中的h2。当尝试systemtest配置文件时,spring boot无法加载上下文并失败。这是由于Spring Boot发现h2依赖项并尝试配置application-systemtest.yml中定义的datasource所致

所以我修改了build.gradle dependencies闭包

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引导正确启动。我不是很喜欢这个解决方案,因为我必须处理配置文件的部分与Gradle。我想知道是否有一种方法来配置spring boot,使profile完全在自身内部管理,在development environment中解析h2,在systemtest environment中解析sqlserver,让Gradle不知道spring profile。

如何解决这个问题?

共有1个答案

钮长恨
2023-03-14

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

 类似资料:
  • 我希望使用Gradle构建我的基于Groovy/Grails的项目,我们使用IntelliJ Idea作为IDE。 我使用的是IntelliJ 11.1.4版本,Gradle 1.2版本。 我的项目被配置为包含各种Groovy&Grails子项目的多项目构建。 我希望这将为我提供与通过Maven管理构建时相同的IDE支持,例如: 自动依赖关系管理(将新的依赖关系添加到各种Build.Gradle时

  • 主要内容:声明依赖关系,依赖关系配置,外部依赖,存储库,发布文件构建脚本定义了构建项目的过程; 每个项目包含一些依赖项和一些发表项。依赖性意味着支持构建项目的东西,例如来自其他项目的所需文件以及类路径中的外部(如或)。发布表示项目的结果,如测试类文件和构建文件,如文件。 负责构建和发布结果。 发布基于定义的任务。 可能希望将文件复制到本地目录,或将其上传到远程Maven或lvy存储库,或者可以在同一个多项目构建中使用另一个项目的文件。 发布的过程称为发布。 声

  • 内置。gradle我们将依赖项指定为 运行gradle cleanEclipse设置项目(将jar添加到类路径) 然而,对于某些API,只有maven依赖项可用(我试图从中运行jersey 2.x示例包)https://jersey.java.net/download.html它只提供pom。(xml) 编辑:我知道我可以指定编译组:'groupId',名称:'artifactId',版本:'ve

  • 我正在使用Gradle的Spring Boot框架。我知道,为了包含一些Spring依赖项,我可以引用“starters”而不显式定义版本;该版本将由我选择的Spring Boot版本控制,它是Spring Boot Gradle插件的版本。示例(省略非相关的分级代码): 请注意,没有为我的应用程序依赖项定义显式版本。 我如何确保我为那些依赖项使用的版本与我的其他Spring Boot依赖项兼容?

  • 有什么理由在子pom中使用依赖关系管理部分吗?我正在查看组织中使用继承和聚合的 maven 项目,其中父 pom 和子 pom 都有一个依赖项管理部分。孩子在做什么吗? 我发现这个问题很有帮助,但没有找到我的具体问题的答案——Maven中dependencyManagement和Dependency之间的区别

  • Maven的核心功能之一是依赖管理。 一旦我们处理多模块项目(由数百个模块/子项目组成),管理依赖项是一项艰巨的任务。 Maven提供高度的控制来管理这些场景。 传递依赖发现 通常情况下,当一个库(比如A)依赖于其他库时,比如说B.如果另一个项目C想要使用A,那么该项目也需要使用库B. Maven有助于避免此类要求发现所需的所有库。 Maven通过读取依赖项的项目文件(pom.xml),找出它们的