SpringBoot工程默認讀取application.properties配置文件。如果需要自定義properties文件,如何讀取呢?
一、在resource中新建.properties文件
在resource目錄下新建一個config文件夾,然后新建一個.properties文件放在該文件夾下。如圖remote.properties所示
二、編寫配置文件
1
2
|
remote.uploadFilesUrl=/resource/files/
remote.uploadPicUrl=/resource/pic/
|
三、新建一個配置類RemoteProperties.java
1
2
3
4
5
6
7
8
9
|
@Configuration
@ConfigurationProperties
(prefix =
"remote"
, ignoreUnknownFields =
false
)
@PropertySource
(
"classpath:config/remote.properties"
)
@Data
@Component
public
class
RemoteProperties {
private
String uploadFilesUrl;
private
String uploadPicUrl;
}
|
其中
@Configuration 表明這是一個配置類
@ConfigurationProperties(prefix = "remote", ignoreUnknownFields = false) 該注解用於綁定屬性。prefix用來選擇屬性的前綴,也就是在remote.properties文件中的“remote”,ignoreUnknownFields是用來告訴SpringBoot在有屬性不能匹配到聲明的域時拋出異常。
@PropertySource("classpath:config/remote.properties") 配置文件路徑
@Data 這個是一個lombok注解,用於生成getter&setter方法,詳情請查閱lombok相關資料
@Component 標識為Bean
四、如何使用?
在想要使用配置文件的方法所在類上表上注解EnableConfigurationProperties(RemoteProperties.class)
並自動注入
1
2
|
@Autowired
RemoteProperties remoteProperties;
|
在方法中使用 remoteProperties.getUploadFilesUrl()就可以拿到配置內容了。
1
2
3
4
5
6
7
8
9
10
11
|
@EnableConfigurationProperties
(RemoteProperties.
class
)
@RestController
public
class
TestService{
@Autowired
RemoteProperties remoteProperties;
public
void
test(){
String str = remoteProperties.getUploadFilesUrl();
System.out.println(str);
}
}
|
這里str就是配置文件中的”/resource/files/”了。
PS:下面看下 Spring-boot中讀取config配置文件的兩種方式
了解過spring-Boot這個技術的,應該知道Spring-Boot的核心配置文件application.properties,當然也可以通過注解自定義配置文件的信息。
Spring-Boot讀取配置文件的方式:
一.讀取核心配置文件信息application.properties的內容
核心配置文件是指在resources根目錄下的application.properties或application.yml配置文件,讀取這兩個配置文件的方法有兩種,都比較簡單。
核心配置文件application.properties內容如下:
1
|
test.msg=Hello World SpringBoot
|
方式一:使用@Value方式(常用)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package
Solin.controller;
import
org.springframework.beans.factory.annotation.Value;
import
org.springframework.web.
bind
.annotation.RequestMapping;
import
org.springframework.web.
bind
.annotation.RestController;
@RestController
public
class
WebController {
@Value(
"${test.msg}"
)
private
String
msg;
@RequestMapping(
"/index1"
)
public
String
index1(){
return
"方式一:"
+msg;
}
}
|
注意:在@Value的${}中包含的是核心配置文件中的鍵名。在Controller類上加@RestController表示將此類中的所有視圖都以JSON方式顯示,類似於在視圖方法上加@ResponseBody。
訪問:http://localhost:8088/index1時得到:"方式一:Hello World SpringBoot"
方式二:使用Environment方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package
Solin.controller;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Value;
import
org.springframework.core.env.Environment;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController;
@RestController
public
class
WebController {
@Autowired
private
Environment env;
@RequestMapping
(
"/index2"
)
public
String index2(){
return
"方式二:"
+env.getProperty(
"test.msg"
);
}
}
|
注意:這種方式是依賴注入Evnironment來完成,在創建的成員變量private Environment env上加上@Autowired注解即可完成依賴注入,然后使用env.getProperty("鍵名")即可讀取出對應的值。
訪問:http://localhost:8088/index2時得到:"方式二:Hello World SpringBoot"
二.讀取自定義配置文件信息,例如:author.properties
為了不破壞核心文件的原生態,但又需要有自定義的配置信息存在,一般情況下會選擇自定義配置文件來放這些自定義信息,這里在resources目錄下創建配置文件author.properties
resources/author.properties內容如下:
1
2
|
author.name=Solin
author.age=
22
|
創建管理配置的實體類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package
Solin.controller;
import
org.springframework.boot.context.properties.ConfigurationProperties;
import
org.springframework.context.annotation.Configuration;
import
org.springframework.stereotype.Component;
//加上注釋@Component,可以直接在其他地方使用@Autowired來創建其實例對象
@Component
@ConfigurationProperties
(prefix =
"author"
,locations =
"classpath:author.properties"
)
public
class
MyWebConfig{
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;
}
}
|
注意:
在@ConfigurationProperties注釋中有兩個屬性:
locations:指定配置文件的所在位置
prefix:指定配置文件中鍵名稱的前綴(我這里配置文件中所有鍵名都是以author.開頭)
使用@Component是讓該類能夠在其他地方被依賴使用,即使用@Autowired注釋來創建實例。
創建測試Controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package
Solin.controller;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.ResponseBody;
@Controller
public
class
ConfigController {
@Autowired
private
MyWebConfig conf;
@RequestMapping
(
"/test"
)
public
@ResponseBody
String test() {
return
"Name:"
+conf.getName()+
"---"
+
"Age:"
+conf.getAge();
}
}
|
注意:由於在Conf類上加了注釋@Component,所以可以直接在這里使用@Autowired來創建其實例對象。
訪問:http://localhost:8088/test時得到:"Name:Solin---Age:22"