1. 程式人生 > >SpringBoot-配置檔案屬性注入-3種方式

SpringBoot-配置檔案屬性注入-3種方式

配置檔案:

datasource.username = admin
datasource.url = /hello/world

方式一: @Value

前提:

     <!-- JavaBean處理工具包 -->
     <dependency>
    <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
     </dependency>

使用:

複製程式碼

@Component
@Data
public class PropertyBean {
    @Value("${datasource.url}")
    private String url;
    @Value("${datasource.username}")
    private String userName;
}

複製程式碼

方式二:

前提:

<!-- 支援 @ConfigurationProperties 註解 -->  
     <dependency>  
       <groupId>org.springframework.boot</groupId>  
       <artifactId>spring-boot-configuration-processor</artifactId>  
       <version>${spring-boot.version}</version>  
   </dependency>  

使用: @ConfigurationProperties

複製程式碼

@Component
@Configuration
@EnableAutoConfiguration
public class PropertyBeanUtil {

    @Bean
    @ConfigurationProperties(prefix = "datasource")
    public PropertyBean propertyBean() {
        return new PropertyBean();
    }

}

複製程式碼

 方式三:獲得Environment 的物件

複製程式碼

@SpringBootApplication
public class SpringBootDemo3Application {

    public static void main(String[] args) {
        final ApplicationContext ctx = SpringApplication.run(SpringBootDemo3Application.class, args);
        Environment environment = ctx.getEnvironment();
        System.out.println(environment.getProperty("datasource.username"));
    }
}

複製程式碼

擴充套件:

 使用@PropertySource註解載入自定義的配置檔案,但該註解無法載入yml配置檔案。然後可以使用@Value註解獲得檔案中的引數值

複製程式碼

/**  
 * 載入properties配置檔案,在方法中可以獲取  
 * abc.properties檔案不存在,驗證ignoreResourceNotFound屬性  
 * 加上encoding = "utf-8"屬性防止中文亂碼,不能為大寫的"UTF-8"  
 */  
@Configuration  
@PropertySource(value = {"classpath:/config/propConfigs.properties","classpath:/config/db.properties"},  
        ignoreResourceNotFound = true,encoding = "utf-8")  
public class PropConfig {  
  
    // PropertySourcesPlaceholderConfigurer這個bean,  
    // 這個bean主要用於解決@value中使用的${…}佔位符。  
    // 假如你不使用${…}佔位符的話,可以不使用這個bean。  
    @Bean  
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {  
        return new PropertySourcesPlaceholderConfigurer();  
    }  
}

複製程式碼