IOC - 讀取配置檔案

CyrusHuang發表於2024-11-02

讀取預設配置檔案

配置檔案(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>

相關文章