springboot配置单独的参数文件

  • Post author:
  • Post category:其他




一、介绍

是不是经常用

@Value

注解?用过

springboot

的都知道它是从

application.properties

文件中引入某个变量的值,是不是已经灰常熟悉了?

默认在

springboot

启动后,加载

application.properties

文件,通过

@Value("${}")

,即可获取到对应的值,使用非常方便。

在这里插入图片描述

当然使用久了,发现太多的变量配置到

application.properties

文件中,就会想到配置一个自定义参数文件,让

@Value("${}")

这样的方式取值不要再从

application.properties

中获取,而从自定义的参数文件中获取。



二、理解

实现方法即重新对

PropertyPlaceholderConfigurer

类的

setLocations()

方法重新指定配置文件路径就可以了。

通过

PropertyPlaceholderConfigurer

可以实现将上下文属性信息放在一个properties文件中,同时还可以通过

System.setProperty(key, value)

这种方式,给容器传递其他参数。



三、方法



1、加配置类

配置方法和

spring

一样,都是通过加配置类,当然

springboot

只需要加一个这样的配置类:

import org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/**
 * Created by lingsf on 2019/6/20.
 * 重新修改@Value注解注入的路径
 */
@Configuration
public class ValueConfig {

    @Bean
    public PreferencesPlaceholderConfigurer getPreferencesPlaceholderConfigurer(){
        PreferencesPlaceholderConfigurer configurer = new PreferencesPlaceholderConfigurer();
        Resource resource = new ClassPathResource("/data.properties");
        configurer.setLocation(resource);
        return configurer;
    }
}

其中上边的

data.properties

即是新的配置文件路径。



2、加参数文件

然后在

resources

下加一个

data.properties

文件即可。

在这里插入图片描述

最后就可以在

data.properties

文件里配置自己的参数。

spring.file.uploadpath=c:/upload/wfvideo



3、使用

使用没有变化,还是使用最方便的

@Value("${spring.file.uploadpath}")

方式即可,你会发现配置内容都是从

data.prooperties

文件来了,实现了与

application.properties

的分离。



四、问题

又回到开始,为什么

@Value

注解读配置文件时,会默认从

application.properties

来获取呢?它是如何知道它呢?



个人理解:

我还没看源码(看不懂~~),首先

application.properties

文件在

springboot

启动后,会加载到容器中,里边的配置参数已经进入到

spring

上下文,维护进一个地方,并且以map那种形式,

key=value

键值对存储。

这时候,你通过对

PropertyPlaceholderConfigurer

类的

setLocations()

方法重新指定配置文件,并写了一个

data.properties

文件,这时候

data.properties

里也相当于加入到

spring

前边维护配置信息的map中,但是map的特性都知道,如果有重名的

key

,那肯定以后者为主。

所以这么看来,并不是

@Value

注解,开始就认识

application.properties

文件,而是它压根不是从

application.properties

文件中获取东西,也不认识

application

,而是从它们共同的老板,

spring

上下文维护的一个配置类中,类似刚才说到的一个map的东西中找东西,而里边的东西默认是

application.properties

文件中填进去的而已。

个人感觉可能是这么回事,可能不对~~~



版权声明:本文为wohaqiyi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。