亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot配置加載文件實例

發布時間:2021-08-27 09:00:18 來源:億速云 閱讀:143 作者:chen 欄目:開發技術

這篇文章主要講解了“SpringBoot配置加載文件實例”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot配置加載文件實例”吧!

目錄
  • 1.SpringBoot配置文件

    • 以設置應用端口為例

  • 2.配置文件目錄

    • 3.自定義配置屬性

      • 自定義配置提示

    • 4.指定配置文件

      • @PropertySource使用

      • 裝配yaml配置文件

      • @ImportResource使用

    • 其他問題

      • idea使用*.properties文件出現中文亂碼問題?

      • 解決方法:

    1.SpringBoot配置文件

    SpringBoot使用一個以application命名的配置文件作為默認的全局配置文件。支持properties后綴結尾的配置文件或者以yml/yaml后綴結尾的YAML的文件配置。

    以設置應用端口為例

    properties文件示例(application.properties):

    server.port=80

    YAML文件示例(application.yml):

    server:
      port: 80

    yaml語法規范這里不多說

    兩者同時存在情況

    假如各配置文件都配置了不同的端口,那么SpringBoot會使用哪一個端口呢?帶著疑問試驗一下實例

    • 在resources目錄下創建兩個配置文件,一個為application.yml配置文件,設置端口為8010,另一個為application.properties配置文件,設置端口為8020;

    • 重啟系統;

    • 運行結果:

    SpringBoot配置加載文件實例

    • 結論:可見在同一目錄下,properties配置優先級 > YAML配置優先級。//所以我們在jar包啟動時帶上properties寫法的配置可以覆蓋配置

    2.配置文件目錄

    SpringBoot配置文件可以放置在多種路徑下,不同路徑下的配置優先級有所不同。可放置目錄(優先級從高到低)

    • file:./config/ (當前項目路徑config目錄下);

    • file:./ (當前項目路徑下);

    • classpath:/config/ (類路徑config目錄下);

    • classpath:/ (類路徑config下).

    優先級由高到底,高優先級的配置會覆蓋低優先級的配置

    SpringBoot會從這四個位置全部加載配置文件并互補配置

    我們可以從ConfigFileApplicationListener這類便可看出,其中DEFAULT_SEARCH_LOCATIONS屬性設置了加載的目錄:

    private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

    接著getSearchLocations方法中去逗號解析成Set,其中內部類Loader負責這一配置文件的加載過程,包括加載profile指定環境的配置,以application+'-'+name格式的拼接加載

    多種目錄配置同時存在情況

    接下來還是以端口配置為例

    • 在resources/目錄下配置文件設置端口為8888;

    • 在resources/config目錄下配置文件設置端口為9999;

    • 在項目路徑下配置文件設置端口為6666;

    • 在項目路徑config目錄下配置文件設置端口為7777;

    SpringBoot配置加載文件實例

    最終運行結果:

    Tomcat started on port(s): 7777 (http) with context path '/beedo'

    Started BeedoApplication in 4.544 seconds (JVM running for 5.335)

    通過控制變量法得以論證

    其優先級由高到底,高優先級的配置會覆蓋低優先級的配置

    3.自定義配置屬性

    SpringBoot提供了許多的配置,但通常情況我們需要自定義自己的配置應用自己的系統中,如你需要配置一個默認的用戶名密碼做為系統的登錄用。

    首先創建一個實體類,作為配置注入用,并使用**@ConfigurationProperties注解進行批量注入, 也可以使用Spring底層注解

    @Value("${user.username}")**的方式一個一個注入達到同意的效果

    @Component
    @ConfigurationProperties(prefix = "user")
    public class Login{
        private String username;
        private String password;
        ...
    }

    或者@Value寫法

    @Component
    public class Login{    
        private String username;
        private String password;
        ...
    }

    配置yaml文件

    user:
        username: admin
        password: 123

    或者properties文件

    login.username=admin
    login.password=123

    編寫一個junit測試用例,看看配置的值是否正常注入:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class DeployApplicationTests {
        @Autowired
        private Login login;
        @Test
        public void contextLoads() {
            System.out.println(login);
        }
    }

    從輸出結果上看,值已正常注入

    Login{username=‘admin', password=‘123'}

    比較項@ConfigurationProperties@Value
    全量注入支持
    松散綁定(Relaxed binding)支持
    SpEL支持
    JSR303支持不支持

    **松散綁定:**駝峰命名(userName)、橫干拼接(user-name)、下劃線(user_name)之間可以互相識別綁定稱為做松散綁定 **JSR303:**通過@Email,@Nullable,@Digits 等等注解進行郵箱、判空、數字格式等等數據的校驗,更多相關內容請參考IBM的中文文檔:https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/index.html @ConfigurationProperties通常用于將配置全量注入某個類中; @Value通常用于注入某一些特定配置值中;

    自定義配置提示

    在編寫配置時,你會發現自定義配置沒有提示,讓你在使用自定義配置時變的很麻煩,其實SpringBoot早已為我們準備好了提示的需要,只需要用引入相關依賴即可有提示。

    在沒有加入依賴時idea會有如下提示:

    SpringBoot配置加載文件實例

    添加依賴,該idea提示便消失,編寫自定義配置時也有相應提示:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

    需要運行一下

    4.指定配置文件

    通常情況下我們將配置配置在application開頭的主配置文件中,這樣隨著項目的增大配置項的增多會使文件變得非常臃腫,其實SpringBoot早已考慮到了該問題,SpringBoot提供了**@PropertySource@ImportResource**兩個注解用于加載外部配置文件使用。

    • @PropertySource通常用于屬性加載配置文件,注意@PropertySource注解不支持加載yaml文件,支持properties文件。

    • @ImportResource通常用于加載Spring的xml配置文件

    @PropertySource使用

    裝配properties配置文件

    在sources/config下創建一個yaml文件命名為user.properties內容與上方user的配置一樣

    SpringBoot配置加載文件實例

    Login類可如下寫法

    @PropertySource(value = {"classpath:config/user.properties"})
    @Component
    @ConfigurationProperties(prefix = "user")
    public class Login{
        private String username;
        private String password;
        ...
    }

    運行一下,同樣能達到加載配置效果

    同時加載多個配置問題

    細心的你,會發現@PropertySource注解中屬性value為一個數組,如果同時加載多個配置文件,并且不同配置文件中對同一個屬性設置了不同的值,那么Spring會識別哪一個呢?

    帶著疑問,我們可以通過控制變量法進行測試,具體過程再在贅述。

    @PropertySource(value = {"classpath:config/user1.properties","classpath:config/user2.properties"})

    結論:Spring加載順序為從左到右順序加載,后加載的會覆蓋先加載的屬性值。

    裝配yaml配置文件

    如果你有強迫癥,一定想加載yaml配置文件,那么可以通過PropertySourcesPlaceholderConfigurer類來加載yaml文件,將原來的user.properties改成user.yaml,Bean配置類中加入如下代碼,Login配置類和一開始的方式一致。

    @Bean
    public static PropertySourcesPlaceholderConfigurer loadProperties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        //yaml.setResources(new FileSystemResource("classpath:config/user.yml"));//File路徑引入
        yaml.setResources(new ClassPathResource("config/user.yml"));//class路徑引入
        configurer.setProperties(yaml.getObject());
        return configurer;
    }

    運行一下,仍然可以能達到加載配置效果的

    @ImportResource使用

    SpringBoot提出零xml的配置,因此SpringBoot默認情況下時不會識別項目中Spring的xml配置文件。為了能夠加載xml的配置文件,SpringBoot提供了@ImportResource注解該注解可以加載Spring的xml配置文件,通常加于啟動類上。

    @ImportResource(value = {"classpath:/beans.xml"})
    @SpringBootApplication(scanBasePackages = {"team.seagull.client"})
    public class DeployApplication {
        public static void main(String[] args) {
            SpringApplication.run(DeployApplication.class, args);
        }
    }

    其他問題

    idea使用*.properties文件出現中文亂碼問題?

    idea對*.properties默認編碼為GBK,通常我們項目為UTF-8編碼,這樣程序在讀取時就會出現亂碼問題;

    解決方法:

    idea 中 打開如下選項File->Sttings->Editor->FileEncodings

    SpringBoot配置加載文件實例

    將GBK修改為UTF-8并勾選

    Transparent native-to ascill conversion(在運行的時候轉換成ascii碼)

    感謝各位的閱讀,以上就是“SpringBoot配置加載文件實例”的內容了,經過本文的學習后,相信大家對SpringBoot配置加載文件實例這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    额尔古纳市| 钟山县| 来凤县| 青冈县| 华宁县| 佛山市| 弋阳县| 乐昌市| 新泰市| 余姚市| 台湾省| 威信县| 临澧县| 通州区| 马尔康县| 蒙阴县| 昌黎县| 六盘水市| 孝感市| 沽源县| 酒泉市| 溧阳市| 屏山县| 和田市| 铁岭市| 浙江省| 都昌县| 天长市| 奉化市| 新乐市| 涿鹿县| 南宫市| 安达市| 沭阳县| 平乡县| 两当县| 屏山县| 明水县| 扬州市| 沽源县| 佛坪县|