【问题标题】:Gradle Spring Boot Custom ConfigurationGradle Spring Boot 自定义配置
【发布时间】:2018-12-24 14:29:51
【问题描述】:

我有一个使用 mysql 数据库来保存信息的应用程序。我想创建一个使用嵌入式数据库 (mariaDB4j) 的应用程序版本并将其作为服务添加到我们的 CI 环境中,因此当我们通过端到端测试启动这个嵌入式版本时,QA 团队获得一个干净的数据库。

我在网上阅读了很多关于此的内容,看起来 gradle 配置是要走的路。我发现的最接近的是:

sourceSets {
    qaci {
        java {
            srcDir 'src/qa/java'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
        compileClasspath += sourceSets.main.resources
    }
}

configurations {
    qaciCompile.extendsFrom compile
}

bootRepackage {
    customConfiguration = myCustomConfig
}

很遗憾,bootRepackagebootJar 取代。我正在使用 gradle spring boot 插件 2.0.1.RELEASE,当我尝试使用 bootJar.customConfiguration 时,我得到一个错误,说这是一个未知属性。

另外,mariaDB4j 需要一个配置类才能正常工作,我已将它包含在 src/qa/java 并创建了一个新的源集以便添加它。

有谁知道如何告诉 gradle spring boot 插件使用自定义配置?

【问题讨论】:

  • 你有没有解决这个问题?

标签: java spring spring-boot gradle configuration


【解决方案1】:

将在您提供的本地路径中自动创建文件系统,以便您可以在重新启动/提供给 qa 时恢复数据。

-- db 文件的位置。如果您需要从头开始重新创建,请删除此目录

mariaDB4j.dataDir=./data/local

默认是 3306,所以使用 3307 以防万一它已经在这台机器上运行

mariaDB4j.port=3307
app.mariaDB4j.databaseName=app_alpha
spring.datasource.url=jdbc:mariadb://localhost:3307/
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

您可以参考这里以获取更多信息 https://objectpartners.com/2017/06/19/using-mariadb4j-for-a-spring-boot-embedded-database/

【讨论】:

  • 在您提供的链接上,它指定您必须创建一个类EmbeddedMariaDbConfig 才能使其正常工作,这是正确的。但是我想做的是在没有这个类的情况下打包我的生产 jar,所以我选择的配置文件并不重要,我的生产 jar 永远不会最终使用嵌入式数据库。这就是我寻找 gradle 源集的原因。这个答案没有告诉我如何在没有EmbeddedMariaDbConfig jar 的情况下构建我的生产 jar,以及如何构建一个带有 EmbeddedMariaDbConfig 的开发 jar。
【解决方案2】:

您是否考虑过使用弹簧型材?

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

它将允许您为少数配置文件(即开发、QA、生产)定义一组不同的值、bean 或配置集,您可以使用它们来运行具有不同配置或不同库的应用程序。

@Configuration
@Profile("production")
public class ProductionConfiguration {}

此类将加载您在 .properties 或 .yml 文件中为该配置文件设置的所有值。

要运行应用程序,您可以传递要用作命令行参数的配置文件

--spring.profiles.active=dev

mariaDB 的配置将位于特定配置文件下。

例如(如果您使用的是 yml ):

spring:
  profiles: QA
  datasource:
    url: jdbc:mariadb://qaserver:1234;databaseName=qaDatabase
    username: USER
    password: PASSWORD
    driverClassName: org.mariadb.jdbc.Driver
    //aditional mariadb properties, configs
spring:
  profiles: production
  datasource:
    url: jdbc:sqlserver://proddatabase:1433;databaseName=production
    username: USER
    password: PASSWORD
    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver

不会处理属于其他配置文件的类和属性。

【讨论】:

  • 是的,事实上这就是我目前正在使用的。但是,即使未使用此代码,我也不太愿意将其运送到生产环境。如果有人决定更改配置文件的行为,甚至删除注释,这将产生灾难性的影响。这就是我考虑 gradle 配置的原因,因为我可以将此代码存储在另一个源集中。
  • 编写自己的 gradle packageJar 任务怎么样? docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/html/…
  • 不幸的是 BootRepackage 任务不适用于 Springboot 2.0.1.RELEASE,我在我的问题中解释了这一点
猜你喜欢
  • 1970-01-01
  • 2020-02-02
  • 2020-11-06
  • 2017-10-11
  • 2018-08-13
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 2021-10-21
相关资源
最近更新 更多