讀取預設配置檔案
配置檔案(application.properties
):可以是 yml 也可以是 properties 格式,properties 不支援map、陣列等,yml 可以
spring.profiles.active: dev
server.port: 18080
讀取
@Component
public class Test {
@Value("spring.profiles.active")
private String profile;
@Value("server.port")
private int port;
// 指定預設值,如果配置檔案不存在配置項,也不指定預設值,啟動會報錯
@Value("application.name:myApplication")
private String applicationName;
}
讀取指定配置檔案
配置檔案
# 檔名稱叫 db.properties
db.host: 192.168.1.1
db.port: 3306
db.username: root
db.password: 123456
讀取
// classpath: 表示當前工程 resource 目錄(application.yml 的預設目錄)
// classpath*: 當前工程和所有 jar 的 resource 目錄(讀取 jar 裡面的配置檔案)
// classpath:conf/db.properties:resource 的下級 conf 目錄
@PropertySource("classpath:db.properties")
@Component
public class DbConfig {
@Value("db.host")
private String host;
@Value("db.port")
private String port;
@Value("db.username")
private String username;
@Value("db.password")
private String password;
}
對映 java 類
配置檔案(application.yml
)
person:
id: 1
name: Milk
bobby: [吃飯, 睡覺, 打豆豆]
family: [father, mother]
map: {k1: v1, k2:v2}
pet: {type: dog, name: 旺財} # 會根據 Pet 類自動對映
對映的 java 類
@ConfigurationProperties(prefix = "person") // 註解表示要對映屬性,並指定字首
public class Person {
// 匹配 person.id
private int id;
private String name;
// 匹配 person.hobby
private List<String> hobby;
private String[] family;
private Map map;
private Pet pet; // 需要建立一個 Pet 類
}
開啟配置
@EnableConfigurationProperties(Person.class) // 開啟對應配置類(寫在哪都可以)
@SpringBootApplication
public class App{
public static void main(String[] args){
SpringApplication.run(App.class, args)
}
}
在 Person 上加 @Component
就可以不寫 @EnableConfigurationProperties(Person.class)
如果想在寫配置項的時候根據配置類進行提示,要加下面這個依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>