SpringBoot個性化配置

在上一篇中我們簡單的介紹了SpringBoot項目的創建及其啓動方式。在這一篇中我們主要介紹一下SpringBoot項目的個性化配置。因爲通過上一篇中知識我們知道SpringBoot項目的默認端口爲8080,那如果我要修改這個默認端口,應該怎麼改呢?又比如SpringBoot項目在啓動時,默認是沒有項目名字的,那如果我們想要添加自己喜歡的項目名字又該怎麼辦呢?這些都在這一篇的內容中。好了,下面我們詳細介紹一下怎麼修改SpringBoot項目中的默認配置。


修改默認端口

  在上一篇的SpringBoot項目中我們看到在resources目錄中有一個application.properties文件,這個文件就是讓我們個性化配置SpringBoot項目參數的,也就是說,在這個文件中按照SpringBoot爲我們提供的參數名,就可以直接修改SpringBoot項目的默認參數。下面我們嘗試修改SpringBoot項目的默認端口。具體修改如下:

  在application.properties文件中添加下面的參數,然後,啓動application.properties文件項目即可。

server.port=8081

  並且如果我們使用IDEA開發工具時,當我們在在application.properties文件中輸入參數時,IDEA就會自動爲我們提供相關參數提示,這樣方便我們修改。也就是如下圖所示:

  title

  這時我們啓動SpringBoot項目並且用8080端口訪問項目時,發現已經找不到服務了。

  title

  而如果我們用訪問8081端口訪問項目,則發現服務可以正常訪問。這就說明,我們已經成功將SpringBoot項目的默認端口修改爲8081端口了。

  title

  雖然上面的方式已經成功的修改了SpringBoot項目的默認參數,但在實際的開發中,並不推薦使用application.properties文件的方式修改,因爲在SpringBoot項目中有更推薦的方式。也就是使用yml文件的方式。


application.yml文件

  使用yml文件的方式修改默認參數,也比較簡單,也就是把application.properties文件文件修改爲application.yml文件即可。唯一不同的方式,就是yml文件有自己獨特的語法,和properties文件不同,可以省略很多參數,並且瀏覽比較直觀。下面我們嘗試用yml文件的方式,將SpringBoot的端口修改爲8082端口。

  title

  啓動項目後訪問剛剛的8081端口,發現項目已經訪問不了。

  title

  這時我們訪問8082端口,發現項目訪問又正常了,這就說明我們使用yml的方式修改SpringBoot的默認參數方式成功了。

  如果我們訪問http://localhost:8082/jilinwu...地址,即可看到SpringBoot接口返回的數據。

  title

修改默認項目名

  下面我們還將使用yml的方式配置SpringBoot項目的項目名。具體參數如下:

server:
  port: 8082
  context-path: /springboot

  我們繼續啓動項目然後依然訪問http://localhost:8082/jilinwu...地址,這時發現接口訪問失敗。

  title

  然後我們訪問http://localhost:8082/springb...地址,發現服務又可正常訪問了。

  title


獲取配置文件中參數

  在實際的項目開發中,我們通常會遇到,讀取配置文件中的參數,那麼在SpringBoot中怎麼獲取配置文件中的參數呢?下面我們在配置文件中添加如下參數。

server:
  port: 8082
  context-path: /springboot
email:
  username: jilinwula
  password: 123456

  下面我們在Controller中採用如下的方式讀取配置文件中的參數。

@RestController
@RequestMapping("/jilinwula")
public class JilinwulaController {

    @Value("${email.username}")
    private String username;

    @Value("${email.password}")
    private String password;

    @RequestMapping("/helloworld")
    public Object helloWorld() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("username", username);
        map.put("password", password);
        return map;
    }

}

  我們可以直接使用@Value註解來獲取配置文件中的參數,並且這個註解不只是在SpringBoot中可以使用,這個註解在Spring的項目中也可以使用。下面我們啓動項目,並訪問http://localhost:8082/springb...地址,看看是不是可以成功的獲取配置文件中的參數。

  title

  我們看上圖所示,我們成功的獲取到了配置文件中的參數。但如果有強迫證的人,對於上面的代碼難免有些不滿意。因爲如果我們要獲取配置文件中非常多的參數時,要是按照上面的代碼編寫,則需要在代碼中編寫大量的@Value註解,這顯然是不合理的。那有沒有比較方便的辦法呢?答案一定是有的,並且SpringBoot爲我們提供了非常方便的方法獲取配置文件中的參數。下面我們看一下這種方式。

  我們首先要在項目的pom.xml中添加以下依賴:

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>

  第一個依賴是自動獲取配置文件參數的必須依賴,而下面的依賴,則是可以用註解的方式動態生成get和set方法,這樣我們在開發時,就不用在寫get和set方法了,在實際的項目中比較常用。在使用lombok生成get和set方法時,還要在IDEA中添加相應的lombok插件,否則IDEA會提示到不到get和set方法的警告。

  title

  其次我們新創建一下獲取配置參數的類,並且添加@ConfigurationProperties註解,該註解會自動將配置文件中的參數注入到類中的屬性中(不需要寫@Value註解)。並且可以指定prefix參數來指定要獲取配置文件中的前綴。具體代碼如下:

package com.jilinwula.springboot.helloworld;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Component
@ConfigurationProperties(prefix = "email")
@Data
public class EmailProperties {
    private String username;
    private String password;
}

  上面中的@Data,註解就是動態生成get和set方法的所以上述的代碼是不需要寫get和set方法的。下面我們看一下Controller中的代碼修改:

package com.jilinwula.springboot.helloworld;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/jilinwula")
public class JilinwulaController {

    @Autowired
    private EmailProperties emailProperties;

    @RequestMapping("/helloworld")
    public Object helloWorld() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("username", emailProperties.getUsername());
        map.put("password", emailProperties.getPassword());
        return map;
    }

}

  下面我們啓動項目並訪問接口看看是否能夠成功獲取配置文件中的參數。

  title

  )


  下面我們介紹一下在SpringBoot中怎麼處理不同環境中獲取不同的配置參數。下面我們模擬兩人環境一個是開發環境,一個是測試環境,我們暫時以不同端口來區分這兩個環境的區別。

  application-dev.yml:

server:
  port: 8081
  context-path: /springboot
email:
  username: jilinwula
  password: 123456

  application-test.yml:

server:
  port: 8082
  context-path: /springboot
email:
  username: jilinwula
  password: 654321

  application.yml:

spring:
  profiles:
    active: dev

  這樣當我們在application.yml文件中的參數設置爲dev時,SpringBoot項目在啓動時就會讀取application-dev.yml中的參數。如果我們將參數設置爲test時,則SpringBoot會讀取application-test.yml文件中的參數。

  下面我們分別啓動項目並且訪問接口:

  • 當參數爲dev:

      title

  • 當參數爲test:

  title

啓動時指定參數

  在上一篇中我們已經介紹過了我們可以使用java -jar 項目的名字的方式啓動SpringBoot項目。並且,該方式還支持指定SpringBoot參數,例如上面剛剛介紹的指定獲取同環境的配置參數。具體命裏如下:

java -jar jilinwula-springboot-helloworld-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

  我們此時繼續訪問接口發現還是成功的獲取了dev環境中的參數。

  title


  上述內容就是SpringBoot個性化配置的內容,如有不正確,或者需要交流的,歡迎留言,謝謝。


項目源碼:

https://github.com/jilinwula/...

原文鏈接:

http://jilinwula.com/article/...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章