[英]Managing dependencies with spring boot profiles and Gradle
我創建了一個使用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
我還將創建一個uber-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配置文件。
如何解決這個問題呢 ?
建議不要使用不同的工件/二進制文件,具體取決於數據庫產品。 嘗試按照@M的建議配置數據源/ Spring配置文件。 使用Deinum防止在使用其他DB時將數據源配置為H2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.