SpringBoot-從入門到放棄(四) 配置文件的更多玩法

         上一節我們玩了SB的properties配置文件和yml配置文件,這篇我們繼續玩,玩一玩一些實用好玩的

1.獲取配置文件裏的值

        就繼續上一節的配置文件,我們配置了端口和上下文根,在SpringBoot中,可以使用Value註解進行獲取。這一次我們也在配置文件裏面隨便添加一個自定義的配置,用於演示獲取。(Value註解也不是SpringBoot專屬的,Spring本身就有在用)

        YAML配置文件如下(hehe不是系統的配置項,所以有警告)


        程序代碼如下
package com.kazz;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class Application {

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

	@Value("${server.context-path}")
	private String context_path;

	@Value("${server.port}")
	private int port; //整形也是沒有問題的
	
	@Value("${hehe.blog}")
	private String blog;
	
	@Value("${hehe.author}")
	private String author;

	@RequestMapping("/config")
	public String config() {
		StringBuilder sb = new StringBuilder("玩一玩配置文件的取值,端口:");
		sb.append(port).append(",上下文根:").append(context_path);
		return sb.toString();
	}
	
	@RequestMapping("/config2")
	public String config2() {
		StringBuilder sb = new StringBuilder("玩一玩配置文件的取值,博客類型:");
		sb.append(blog).append(",作者:").append(author);
		return sb.toString();
	}
}

        啓動程序,分別訪問http://127.0.0.1:12345/sb/config和http://127.0.0.1:12345/sb/config2,結果如下



2.封裝配置項

        實際項目開發過程中,一般不會使用這種@Value直接引用配置項,而是將其封裝起來,已get方法的形式給外部調用,當然我們自己在封裝配置項類時,對成員使用@Value也是可以的,不過SpringBoot給我們提供了一種更方便快捷的封裝形式:@ConfigurationProperties,我們新建一個類演示一下
package com.kazz;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "hehe") // 指定配置項的前綴
public class Configs {

	private String blog;

	private String author;

	public String getBlog() {
		return blog;
	}

	public String getAuthor() {
		return author;
	}
	//不能省略set方法
	public void setBlog(String blog) {
		this.blog = blog;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

}


        使用@ConfigurationProperties註解時,開發工具提示我,要在pom文件裏面加入一下依賴,不然會有警告
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-configuration-processor</artifactId>
		<optional>true</optional>
	</dependency>


        搞定後,在我們的主函數裏面添加對這個配置項類的注入與使用的代碼
	@Autowired
	private Configs configs;

	@RequestMapping("/config3")
	public String config3() {
		StringBuilder sb = new StringBuilder("玩一玩配置項的封裝,博客類型:");
		sb.append(configs.getBlog()).append(",作者:").append(configs.getAuthor());
		return sb.toString();
	}


        啓動程序,瀏覽器訪問http://127.0.0.1/sb/config3,結果如下截圖



3.profile配置

        實際開發過程中,我們經常遇到這樣的問題:本地開發環境,和測試環境、生產環境的配置不同。各個環境,要麼ip不同、要麼端口不同、要麼業務參數不同,導致的相同的程序,相同的配置文件名有着不太能同的配置信息。有時候新增配置項,由於編寫投產手冊的疏忽,導致配置出錯而出現生成故障,這是很不應該的。

        爲了解決這個問題,Spring提出來profile的支持,即程序能同時配置多個子配置文件,通過修改主配置文件的指向來使用這些子配置文件的其中一個。下面我在我的項目中的src/resources/下,新建application-kaifa.yml和application-shengchan.yml兩個配置文件,用來區分開發環境和生產環境。



        生產環境的配置文件



      開發環境的配置文件



        主配置文件


 
        現在的主配置文件,指明使用的配置文件是開發環境的,即使用application-kaifa.yml,此時我們的程序沒有做任何的修改,我們啓動程序,再次訪問上面的config3,不過端口改了,http://127.0.0.1:6666/sb/config3,結果如下



        說明程序已經成功加載到了開發環境的配置文件,現在我們再把主配置文件改爲指向生產環境,再次訪問config3,結果如下所示


         能看出程序已經切換爲生產環境的配置文件了。其實也並不是一定要主配置文件只有spring:profile:active項,然後其他的全都寫在各個子配置文件中,當子配置文件的配置項相同,建議還是把這些相同的配置項寫在主配置文件裏面,不然以後改配置項也很容易改漏。

        另外,當主配置文件和子配置文件存在相同配置時,程序還是會已子配置文件的爲準,不信的話,就自動動手試試看吧!



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