我正在使用gradle构建一个需要连接DB的springboot应用程序。对于我的本地dev,我希望有H2 DB,但当我在实际的env中部署时,我希望psotgresql,所以当我打包并运行我的应用程序dev/test/prod环境时,我需要排除H2 DB。
无法实现这一点。两个依赖项都被包含或排除。
dependencies {
//other dependencies
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
//nonLocalImplementation 'org.postgresql:postgresql'
//implementation 'com.h2database:h2'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
if (project.hasProperty("local")) {
implementation 'com.h2database:h2'
}
if(project.hasProperty("test") || project.hasProperty("prod")){
implementation 'org.postgresql:postgresql'
}
}
bootRun {
systemProperty 'spring.profiles.active', project.findProperty("activeProfile") ?: 'default'
}
个字符
给了我编译时错误,因为我的代码将期望H2 Web服务器类可用
2条答案
按热度按时间j13ufse21#
Sping Boot 已经为这个
developmentOnly
提供了一个特殊的作用域。这是一个特殊的作用域,用于开发过程中需要的依赖项,但不应该在构建工件中。Sping Boot Gradle插件文档中也记录了该范围。
因此,而不是不同属性的复杂性,并为各种环境单独构建,只需使用特定的范围。
字符串
有了上面的依赖项,H2将在开发过程中本地使用,但不包含在工件中。H2的嵌入式数据库优先于PostgreSQL驱动程序(由于嵌入式),因此它将工作。
qvk1mo1f2#
相反,这使得它更复杂,你可以尝试这样做,使条件依赖-
字符串
告诉我你是否还有问题。