寫在前面
上一篇文章,簡單介紹了創建Spring Boot項目,這篇文章主要記錄Spring Boot的簡單配置、兩種配置文件、通過註解獲取配置文件裏的值以及多環境的配置。
簡單的配置
上一節創建好一個Spring Boot項目之後,會在src/main/resources
下創建一個配置文件application.properties
。下面在該配置文件內進行簡單的配置。配置如下:
#配置地址,默認就是本地地址
server.address=127.0.0.1
#配置服務端口,默認爲8080
server.port=8080
#配置上下文路徑,默認是‘/’
server.context-path=/boot
.yml配置文件
在Spring Boot中,還有一種配置文件,被更多開發者所使用。是以.yml結尾的一種配置文件。
我們首先需要創建這個配置文件,在和application.properties
同一個目錄下,我們新建一個application.yml
文件。在該文件下,配置與上一步一樣效果的配置。
#需要注意的是,該類型配置文件,冒號與值之間務必要添加空格!!!
server:
address: 127.0.0.1
port: 8080
context-path: /boot
與上一步的區別顯而易見,有層次感,結構清晰,所以,建議使用該類型的配置文件。PS:後面的所有配置都是使用.yml
配置,還有就是,不管你選擇哪種,另一種配置文件就能刪除了。
通過註解獲取配置文件屬性
代碼中調用配置文件屬性
在配置文件中,我們可以設置一些屬性,供代碼裏面調用,比如,我們設置一個人的名字,我們可以在配置文件裏這樣配置:
server:
address: 127.0.0.1
port: 8080
context-path: /boot
name: HowieLi
age: 18
在代碼裏調用name
的值,需要使用到@Value
註解,代碼如下:
package cn.howieli;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
RestController
public class HelloController {
@Value("${name}") //通過${變量名}調用
private String name;
@Value("${age}")
private int age;
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return name + age;
}
}
此時啓動項目,訪問http://localhost:8080/boot/hello
,就會顯示HowieLi18
了。
配置文件中調用配置文件中的屬性
在配置文件中,可以通過${變量名}
來調用上面的屬性,配置如下:
server:
address: 127.0.0.1
port: 8080
context-path: /boot
name: HowieLi
age: 18
content: "name: ${name}, age: ${age}"
代碼中直接調用content
就可以了,訪問啓動的應用顯示name: HowieLi, age: 18
。
配置文件中配置JavaBean
生活中一個人的屬性有很多,不光有姓名、年齡,可能還要有身高、住址等等屬性,如果我們在配置文件中全部配置出來,在代碼中一個一個通過註解調用會不會感覺很傻?不過,幸好Spring Boot提供瞭解決方案。現在我們將配置文件修改如下:
person:
name: HowieLi
age: 18
之後,創建一個Person類,爲屬性必須設置get
和set
方法,親測,不設置,值會爲0
或null
,或者直接NullPointerExcepotion
,爲方便查看,重寫一個toString
方法。Person類如下:
package cn.howieli;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component //將Person類交由Spring容器管理
@ConfigurationProperties(prefix = "person") //填寫配置文件中的前綴
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
使用@Autowired
註解注入,調用數據:
package cn.howieli;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
private Person person;
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return person.toString();
}
}
重新啓動項目,訪問顯示Person [name=HowieLi, age=18]
。
多環境配置
在實際開發中,可能會針對不同的環境進行開發,我們作爲開發人員,總不能每次部署項目都一個一個的去更改配置吧?我們需要把有限的時間放到更有意義的事上。
接下來,我們在配置文件所在目錄下新鍵一個作爲開發環境的配置文件:application-dev.yml
,配置如下:
server:
address: 127.0.0.1
port: 8080
context-path: /boot
person:
name: Lihao
age: 20
再創建一個作爲生產環境的配置文件:application-prod.yml
,配置如下:
server:
address: 127.0.0.1
port: 8080
context-path: /boot
person:
name: HowieLi
age: 18
此時,修改原配置文件application.yml
,配置如下:
spring:
profiles:
active: dev
此時重新啓動應用,訪問http://localhost:8080/boot/hello
,就會顯示Person [name=Lihao, age=20]
,name
和age
的值是開發環境下,也就是application-dev.yml
配置文件中的值。反之,將dev
修改爲prod
,重新啓動應用訪問就會顯示Person [name=HowieLi, age=18]
。dev
和prod
主要取決於之前創建的兩個配置文件。
補充一點,在使用java -jar
命令也可以指定不同的profile
啓動,命令如下:
java -jar my-spring-boot.jar --spring.profiles.active=dev
不清楚該命令的可查看我的上一篇博客:Spring Boot學習筆記-STS創建第一個Spring Boot應用 (其它啓動方式部分)
結語
以上就是我自己的學習筆記,如有補充或有錯,請一定要指正,一起進步。個人博客:https://www.howieli.cn 和個人CSDN博客: http://blog.csdn.net/howieli_1995。