spring读取外部配置文件

摘要:
因此,我们希望这些值可以写入外部配置文件。如果要修改配置文件,可以直接修改配置文件而不移动源代码。使用@PropertySource注释和Environment@PropertySource:使用此注释,可以导入属性格式的配置文件以解析环境:通过@PropertySource解析的文件属性将保存在环境中。@Configuration@PropertySourcepublicclassTestConfig{@AutowiredEnvironmentenv;@BeanpublicStudentgetStudent(){returnnewStudent;}}在本例中,@PropertySource引用名为app的文件。类路径中的属性。应用程序的内容。属性文件如下:student。id=1725110学生。name=zdl此属性文件将加载到环境中。环境。getProperty()从环境中检索属性。

在开发中我们经常有些值是在不确定的,需要运行时才赋确定的值(比如数据库连接ip地址,开发时可能用本地数据库测试,上线时就改用服务器数据库 ),还有如果在每个地方都硬编码写死了,之后要改就很麻烦。所以我们希望可以将这些值写到外部配置文件,如果要进行修改就直接修改配置文件而不用动源码。

使用@PropertySource注解和Environment

@PropertySource:通过这个注解可以导入一份properties格式的配置文件进行解析

Environment:通过@PropertySource解析的文件属性会保存在Environment中

@Configuration
@PropertySource("classpath:app.properties")
public class TestConfig {
    @Autowired
    Environment env;
    @Bean
    public Student getStudent(){
        return new Student(env.getProperty("student.id"),
                env.getProperty("student.name"));
    }
}

在本例中,@PropertySource引用了类路径中一个名为app.properties的文件,app.properties文件内容如下:

student.id=1725110
student.name=zdl

这个属性文件会加载到Environment中,env.getProperty()就是从Environment检索属性。

getProperty()方法有四个重载的变种形式:

String getProperty(String key)//获取不到值就为null
String getProperty(String key,String defaultValue)//获取不到值就赋值默认值defaultValue
T getProperty(String key,Class<T> type)//将获取到的字符串值转成type类型
T getProperty(String key,Class<T> type,T defaultValue)//将获取到的字符串值转成type类型,如果没有就赋值defaultValue

getRequiredProperty()//获取不到值就抛出异常

使用@Value

在上面的例子中,需要我们获取到Environment对象,调用getProperty()方法获取对应的属性。如果使用@Value比较方便.

@Value("${student.id}")

${student.id}是一个占位符,需要配置PropertySourcesPlaceholderConfigurer才能解析,不够springboot好像默认就配置了,@Value()就可以把占位符表示的属性注入到变量中。

首先在配置类中配置PropertySourcesPlaceholderConfigurer和导入配置文件app.properties

@Configuration
@PropertySource("classpath:app.properties")
public class TestConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
        return new PropertySourcesPlaceholderConfigurer();
    }

}

然后在实体类中通过@Value引用配置文件的属性了

@Component
@PropertySource("classpath:app.properties")
public class Student {

    @Value("${student.id}")
    private String id;

    @Value("${student.name}")
    private String name;

}

通过这样的方式引用的值就会注入到对象的属性中;

除了可以注入到属性中,还可以注入到方法的参数中

比如:

@Component
@PropertySource("classpath:app.properties")
public class Student {
    private String id;
    private String name;

    public Student(@Value("${student.id}") String id,@Value("${student.name}") String name) {
        this.id = id;
        this.name = name;
    }
}

免责声明:文章转载自《spring读取外部配置文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx出错:rewrite or internal redirection cyclec# 扩展方法 奇思妙用 高级篇 九:OrderBy(string propertyName, bool desc)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java 之 clone 方法(对象拷贝)

一、对象的克隆(拷贝)   克隆的对象包含一些已经修改过的属性,而 new 出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠克隆方法了。 二、克隆分类   1、克隆对象前提 protected native Object clone() throws CloneNotSupportedException;     ...

ClosedXML导出Excel简单使用

c#经常会用到导出excel。 ClosedXML是一个.NET库,用于读取,操作和写入Excel 2007+(.xlsx,.xlsm)文件。它旨在提供一个直观且用户友好的interface来处理基础的OpenXML API。 ClosedXML许可证是MIT。 示例: using ClosedXML.Excel; using DoExcel.Models...

XML文件与实体类的互相转换

一.将XML文件反序列化为实体类对象   1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config)。但是现在为了演示XML序列化和反序列化,将配置信息保存在一个XML文件(config.xml)中,通过反序列化将配置信息读取出来保存到一个单独的类(Config.cs)中。这样如果需要用到配置信息,没必要每...

JSON 之GSON 解析

一、 谷歌GSON这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。 二、Gson解析Json步骤  A、服务器端将数据转换成json字符串    首先、服务器端项目要导入Gson的jar包到BuiltPath中。( Gson的jar:http://...

Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)

接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理。 还提到EntityFramework和Dapper,EntityFramework和Dapper是.net环境下推崇最高的两种ORM工具。 1、EntityFramework是出自微软根正苗红的.net下的ORM工具,直接在Vs工具和Mvc框架中集成了,默认生成的项目就...

Thrift的TJsonProtocol协议分析

Thrift协议实现目前有二进制协议(TBinaryProtocol),紧凑型二进制协议(TCompactProtocol)和Json协议(TJsonProtocol)。 前面的两篇文字从编码和协议原理方面分析了TBinaryProtocol和TCompactProtocol协议,下面对TJsonProtocol协议做一下分析。 TJsonProtocol...