首頁  >  文章  >  Java  >  springboot指定profiles啟動失敗問題如何解決

springboot指定profiles啟動失敗問題如何解決

王林
王林轉載
2023-05-11 18:46:121083瀏覽

    springboot指定profiles啟動失敗

    #平常啟動springboot的jar包,都是透過–spring.profiles.active=dev, 即可讀取application-dev.yml的設定檔的資訊,進行啟動

    凡事總有意外

    這次啟動就很奇怪了, 輸入這個啟動環境參數, 依然不起效果,

    springboot指定profiles啟動失敗問題如何解決

    就是這麼驚悚, 就是這麼意外!

    沒有讀取application-dev.yml而是讀取預設的application.yml檔案

    #但是, 使用jvm的啟動參數: java -jar -Dspring.profiles.active=dev, 可以啟動, 證明dev的設定檔是有效的

    比較其他項目

    application的入口類別發現:

    public static void main(String[] args){
    	SpringApplication.run(Application.class,args);
    }

    呼叫run方法的時候, 沒有傳入args!

    閱讀原始碼發現, 傳入啟動參數, 再解析傳入參數,對properties進行設定

    #注意:

    細心細心, 啟動程式碼需要傳入啟動參數!!! 方能在啟動時,輸入啟動參數生效

    springboot Profiles、設定檔載入優先權

    SpringBoot允許我們有多個設定文件,然後在專案啟動時根據條件動態去載入對應的設定檔。

    現在有三個配置,一個預設設定檔(application.properties:因為是SpringBoot指定的名字,所以叫預設設定檔),兩個指定環境設定檔(application-prod.properties和application-dev .properties:和對應的環境有關,所以叫它們指定環境設定檔)

    application-dev.properties

    模擬開發設定資訊

    person.name=ZhangSan
    person.age=18

    application-prod.properties

    #就模擬生產配置資訊

    person.name=LiSi
    person.age=19

    application.properties

    就指定一個服務的連接埠號碼和工程在啟動的時候需要載入的設定文件,SpringBoot會自動去匹配application-{spring.profiles.active}.properties,然後就會找到application-dev.properties設定檔

    server.port=8080
    spring.profiles.active=dev #我们可以指定SpringBoot在启动时加载那个对应的配置文件

    事例程式碼

    建立了一個事例Person類,讓它被實例化的時候從設定檔讀取訊息,讀取規則:person.{屬性名稱},讓把建立new一個Person的實例,加入到IOC容器中。

    建立一個get請求,傳回我們的Person的事例,我們看perosn的屬性值能否根據我們在application.properties設定檔中指定spring.profiles.active的屬性載入對應的設定文件,Person實例中的值是不是預期值

    @ConfigurationProperties(prefix = "person") //初始化的时候从配置文件中读取person.{属性名}的信息赋值给当前对象
    @Data
    public class Person {
        private String name;
        private Integer age;
    }
     
     
     
    @Configuration //配置文件信息,将Person实例注入到IOC容器中
    public class MyConfig {
     
        @Bean
        public Person person() {
            return new Person();
        }
     
    }

    @RestController //建立get請求,傳回我們的Person的事例,我們看perosn的屬性值能否根據我們在application.properties設定檔中指定spring .profiles.active的屬性載入對應的設定文件,Person實例中的值是不是預期值

    @RequestMapping("/user")
    public class PersonController {
     
        @Autowired
        private Person person;
     
        @GetMapping
        public Person getPerson() {
            return person;
        }
    }

    工程跑起來,訪問http://localhost:8080/user,回傳結果:

    {"name":"ZhangSan","age":18}

    把application.properties中的spring.profiles.active的值修改成prod,請求訪問http: //localhost:8080/user,回傳結果:

    {"name":"LiSi","age":19}

    另外如果我們已經將工程打包成jar,可以在啟動SpringBoot工程的時候,透過命令列給參數賦值的方式指定spring.profiles.active的值

    java -jar .\web-02-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

    還有一個比較實用的,就是SpringBoot預設載入application.properties和application.yaml的路徑和優先順序(從SpringBoot官方文件中看到的:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config. application-json),載入的優先權:

    • jar套件所在的目錄下面的/config/{一級子目錄}下面的application.properties和application.yaml

    • jar套件所在的目錄下面的/config下面的application.properties和application.yaml

    • jar套件所在的目錄下面的application.properties和application.yaml

    • classpath下面/config裡面的application.properties和application.yaml

    • classpath下面的application.properties和application.yaml

    場景就是:我們的專案跑了很久了,突發狀況需要修改設定檔。但是以前的舊檔案我們也不敢隨意修改,這時候我們就可以在優先順序高的地方放我們的新的配合文件了。

    以上是springboot指定profiles啟動失敗問題如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除