我正在構建一個有兩種不同情況的演示應用程式,第一種是開發,第二種是生產。 這是我的 pom.xml
... (版本、名稱等)
<properties>
<java.version>11</java.version>/span>
<spring-cloud.version>/span>2020.0.3</spring-cloud.version>/span>
<project.build.sourceEncoding>/span>UTF-8</project.build.sourceEncoding>/span>
<! --DEFAULT PROFILE-->
<env>development</env>/span>
</properties>/span>
<dependencies>
... (lombok, junit, swagger, datarest, datatest, web, webmvc...)
</dependencies> ...
<dependencyManagement>/span>
<dependencies>/span>
<dependency>>
<groupId>/span>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>/span>pom</type>
<scope>import</scope>
</dependency>/span>
</dependencies>
</dependencyManagement>/span>
<build>/span>
<filters>/span>
<filter>src/main/resources/${env}.yml</filter>
</filters>/span>
<resources>/span>
<resource>/span>
<directory>/span>src/main/resources</directory>
<filtering>true</filtering>
<includes>/span>
<include>*.yml</include>
<include>*.xml</include>
<include>*.properties</include>
</includes>/span>
</resource>/span>
</resources>/span>
<plugins>/span>
<plugin>/span>
<groupId>org.springframework.boot</groupId>/span>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>/span>
<excludes>/span>
<exclude>/span>
<groupId>/span>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>/span>
</excludes>/span>
</configuration>/span>
</plugin>/span>
</plugins>/span>
</build>/span>
<profiles>
<profile>/span>
<id>development</id>
<activation>>
<activeByDefault>true</activeByDefault>
</activation>/span>
<properties>/span>
<start-class>com.central.CentralApplication</start-class>
<env>/span>development</env>/span>
</properties>/span>
<dependencies>>
<dependency>>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>/span>
</dependencies>
</profile>/span>
<profile>/span>
<id>production</id>
<activation>/span>
<property>/span>
<name>production</name>/span>
</property>/span>
</激活>/span>
<properties>/span>
<env>production</env>/span>
<start-class>/span>com.central.CentralApplicationProd</start-class>
</properties>/span>
<dependencies>>
<dependency>>
<groupId>/span>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
<version>/span>3.0.3</version>
<scope>編譯</scope>/span>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>/span>3.0.3</version>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>/span>3.0.3</version>
</dependency>/span>
<dependency>>
<groupId>/span>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.9.RELEASE</version>/span>
</dependency>>
<dependency>>
<groupId>/span>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>/span>
</dependencies>
</profile>/span>
</profiles>/span>
</project>/span>
在pom中似乎沒有問題,但是當我試圖創建我需要的生產用途的main時,它找不到Eureka和Feign的依賴項(@EnableEurekaClient和@EnableFeignClients)。另一方面,如果我改變了<activeByDefault>true</activeByDefault>并把它放在生產組態檔中,它就會加載它的依賴項,但是,顯然,不會加載開發的依賴項。
我怎樣才能在編碼時加載這兩個依賴? 我的方法是否錯誤?
預先感謝!
uj5u.com熱心網友回復:
如果你有一個spring boot應用程式,你不應該為任何依賴性定義任何組態檔。
如果你需要對開發有不同的配置,那么你應該使用spring profiles來代替。這意味著你可以定義像application.properties(也可以用.yml)或application-dev.properties這樣的檔案,通過--spring.profiels.active=dev來激活application-dev.properties。
此外,如果你需要h2資料庫只用于測驗,你應該簡單地使用<scope>test</scope>來代替。
這看起來很奇怪,你在prod組態檔中定義了spring-boot-starter-actuator依賴性,但在dev中卻沒有。
另一件事是你定義了<start-class>com.central.CentralApplication</start-class>,默認是通過包含@SpringBootApplication注釋的類來定義。這意味著你只有一個用于該目的的類,而且對于哪個環境等并不重要。
我強烈建議你閱讀spring boot檔案等。 問題是,為什么不為兩者都進行定義呢?
此外,我看到你在spring-boot-maven-plugin配置中明確排除了lombok。這意味著你通常沒有正確定義lombok的依賴范圍。
如果你使用bom匯入,最好的做法是不要自己定義依賴的版本,否則你可能會出現版本混雜的情況,從而導致問題。
最后一個建議是不要使用組態檔來使用不同的依賴。
https://docs.spring.io/spring-boot/docs/current/reference/html/
uj5u.com熱心網友回復:
你應該把共享的依賴放在你的pom檔案的主要部分的組態檔標簽之外。你的代碼中的Java類需要這種依賴性。
如果你想在不同的環境中實作不同的邏輯,我建議你在你的Spring組態檔中使用不同的profile。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/313468.html
標籤:
