SpringBoot個性化配置

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


修改默認端口

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

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

server.port=8081

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

  title

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

  title

  而若是咱們用訪問8081端口訪問項目,則發現服務能夠正常訪問。這就說明,咱們已經成功將SpringBoot項目的默認端口修改成8081端口了。springboot

  title

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


application.yml文件

  使用yml文件的方式修改默認參數,也比較簡單,也就是把application.properties文件文件修改成application.yml文件便可。惟一不一樣的方式,就是yml文件有本身獨特的語法,和properties文件不一樣,能夠省略不少參數,而且瀏覽比較直觀。下面咱們嘗試用yml文件的方式,將SpringBoot的端口修改成8082端口。ide

  title

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

  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/...

相關文章
相關標籤/搜索