2016-02-26 134 views
4

假設我有5個Spring Boot項目。他們都有一個Maven依賴於Spring Boot項目No 6和一些共享/通用類。 5個獨立的項目在每個application.properties都有很多共同屬性,我想將它們抽象並移動到常見項目中。整體而言,這看起來是這樣的:Spring Boot繼承依賴關係中的application.properties

          Project 1 (app.properties) 
Common Project (app-common.properties) <--- Project 2 (app.properties) 
              Project 3 (app.properties)... 

目前的問題是app-common.properties是project1.jar/lib中/共project.jar內app-common.properties顯然不啓動時加載。

有沒有辦法從依賴項擴展它?

CommonProject主類看起來是這樣的:

@SpringBootApplication 
public class CommonApplication extends SpringBootServletInitializer { 

    protected static void run(SpringApplication application, String[] args) { 
     application.run(args); 
    } 
} 

PROJECT1主類看起來是這樣的:

public class Project1 extends CommonApplication { 

    public static void main(String[] args) { 
     run(new SpringApplication(Project1.class), args); 
    } 
} 
+0

你找出解決的辦法? – codesalsa

+0

不是。 我已經結束了使用常量提取所有常見的值/屬性給一個java類,其中值是@Inject'通過setters編輯。這個java類用於底層項目。跛腳,但快速解決方法。如果我將來會找到更好的方法,我會在這裏發佈。 –

+0

謝謝,所以我實際上嘗試了下面安東的工作。我在一個依賴項中有一個共同的道具文件,並使用它看起來很好的classpath道具。只需在註明您的@SpringBootApplication – codesalsa

回答

1

當前的spring引導不提供繼承屬性。

彈簧引導應用程序支持多個屬性源,但xxx.properties的慣例(讀取:內置邏輯)是解決最後xxx.properties如果有多個屬性文件具有相同的文件名。

有很多解決方案。

一個可能的解決方案是

  1. 應用自定義配置文件的依賴性
  2. 包括在application-customprofile.properties
  3. 可繼承設置有application[-{profile}].properties(注意相關的(一個或多個)設置spring.profiles.include=customprofile:如果設置在application.properties,它適用於所有配置)

另一種可能的解決方案是使用一種獨特的銅stom文件名的屬性。

  • 即而不是使用默認的application.properties,使用common.properties
+0

,例如'java -jar myproject.jar --spring.config.name = myproject' https://docs.spring.io/spring-boot/docs/current/reference /html/boot-features-external-config.html#boot-features-external-config-application-property-files – aliopi

相關問題