首頁 > 軟體

springboot如何通過@Value,@ConfigurationProperties獲取設定

2022-03-18 19:00:09

通過@Value,@ConfigurationProperties獲取設定

spring boot 獲取設定項值

使用版本是1.5.4

舉例一個執行緒池的設定:

在application.yml新增設定項及值

    # 執行緒池設定
    taskexecutor:
      corePoolSize: 5
      maxPoolSize: 10
      queueCapacity: 25

通過@Value 獲取值

@Configuration
@EnableAsync
public class ExecutorConfig {
    @Value("${taskexecutor.corePoolSize}")
    private int corePoolSize;
    @Value("${taskexecutor.maxPoolSize}")
    private int maxPoolSize;
    @Value("${taskexecutor.queueCapacity}")
    private int queueCapacity;
    @Bean
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix("TaskExecutor-");
        executor.initialize();
        return executor;
    }
    }

通過@ConfigurationProperties 獲取值 

    @Configuration
    @EnableAsync
    @ConfigurationProperties(ignoreUnknownFields = false,prefix = "taskexecutor")
    public class ExecutorConfig {
    private int corePoolSize;
    private int maxPoolSize;
    private int queueCapacity;
    @Bean
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix("TaskExecutor-");
        executor.initialize();
        return executor;
    }
    }

通過@ConfigurationProperties載入組態檔,將設定項與bean及屬性關聯,指定ignoreUnknownFields當有屬性未匹配到值時會丟擲異常,用prefix指定設定項的字首。

@ConfigurationProperties還支援層級結構、 布林、集合等型別的值注入

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/

說下@ConfigurationProperties和@Value區別

 @Configuration@Value
功能批次注入組態檔中的屬性一個個指定
鬆散繫結(鬆散語法)支援不支援
SPEL語法不支援支援
JSR303資料校驗支援不支援
複雜型別封裝支援不支援

組態檔yml還是properties他們都能獲取到值;

如果說, 只是在某個業務邏輯中需要獲取一項組態檔中的某項值, 使用@Value

如果說,專門編寫了一個javaBean 來和組態檔進行對映,我們就直接使用@ConfigurationProperties;

組態檔注入值資料校驗

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
 
    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面值/${key} 從環境變數,組態檔中獲取值/#{Spel}"></property>
     * </bean>
     */
    //Value("${person.last-name}")
    //lastName必須為郵箱格式
    @Email
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> list;
    private Dog dog;

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com