springboot之配置文件
程序员文章站
2022-06-20 09:39:37
springboot在加载配置文件的时候是有先后顺序的,了解加载配置文件的先后顺序,可以减少编写程序出现错误 1 springboot加载配置文件的先后顺序如下: SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Envi ......
springboot在加载配置文件的时候是有先后顺序的,了解加载配置文件的先后顺序,可以减少编写程序出现错误
1 springboot加载配置文件的先后顺序如下:
springapplication
将从以下位置加载application.properties
文件,并把它们添加到spring environment
中:
- 当前目录下的
/config
子目录。 - 当前目录。
- classpath下的
/config
包。 - classpath根路径(root)
启动的时候,1中的配置文件优先级最高,会覆盖2,3,4中的配置信息
2 工程结构如图:
代码如下:
package com.rookie.bigdata.config; import org.springframework.beans.factory.annotation.value; import org.springframework.boot.context.properties.configurationproperties; import org.springframework.stereotype.component; /** * springboot注入随机值 * my.secret=${random.value} * my.number=${random.int} * my.bignumber=${random.long} * my.number.less.than.ten=${random.int(10)} * my.number.in.range=${random.int[1024,65536]} * <p> * <p> * created by on 2018/9/29. */ @component //此注解可以省略 //@configurationproperties public class randomconfig { @value("${random.value}") private string secret; @value("${random.long}") private long number; @value("${random.int(10)}") private string numberless; @value("${random.int[1024,65536]}") private integer numberrange; @value("${name}") private string name; public string getname() { return name; } public void setname(string name) { this.name = name; } public string getsecret() { return secret; } public void setsecret(string secret) { this.secret = secret; } public long getnumber() { return number; } public void setnumber(long number) { this.number = number; } public string getnumberless() { return numberless; } public void setnumberless(string numberless) { this.numberless = numberless; } public integer getnumberrange() { return numberrange; } public void setnumberrange(integer numberrange) { this.numberrange = numberrange; } }
package com.rookie.bigdata.config; import org.springframework.beans.factory.annotation.value; import org.springframework.stereotype.component; /** * * springboot允许使用占位符进行配置 * created by on 2018/9/29. */ @component public class appconfig { @value("${app.name}") private string appname; @value("${app.description}") private string appdesc; public string getappname() { return appname; } public void setappname(string appname) { this.appname = appname; } public string getappdesc() { return appdesc; } public void setappdesc(string appdesc) { this.appdesc = appdesc; } }
package com.rookie.bigdata; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; /** * 应用程序启动类 * created by on 2018/8/2. */ @springbootapplication public class application { public static void main(string[] args) { springapplication springapplication = new springapplication(); //通过设置该参数禁用命令行属性添加到environment // springapplication.setaddcommandlineproperties(false); springapplication.run(application.class, args); } }
package com.rookie.bigdata.config; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.test.context.springboottest; import org.springframework.test.context.junit4.springrunner; import static org.junit.assert.*; /** * created by liuxili on 2018/9/29. */ @runwith(springrunner.class) @springboottest public class appconfigtest { @autowired appconfig appconfig; @test public void test1() { system.out.println(appconfig.getappname()); system.out.println(appconfig.getappdesc()); } }
package com.rookie.bigdata.config; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.test.context.springboottest; import org.springframework.test.context.junit4.springrunner; import static org.junit.assert.*; /** * created by liuxili on 2018/9/29. */ @runwith(springrunner.class) @springboottest public class randomconfigtest { @autowired randomconfig randomconfig; @test public void test1(){ system.out.println(randomconfig.getsecret()); system.out.println(randomconfig.getnumber()); system.out.println(randomconfig.getnumberless()); system.out.println(randomconfig.getnumberrange()); system.out.println(randomconfig.getname()); } }
配置文件如下
my.secret=${random.value} my.number=${random.int} my.bignumber=${random.long} my.number.less.than.ten=${random.int(10)} #my.number.in.range=${random.int[1024,65536]} name=lisi #属性占位符 #当使用application.properties定义的属性时,spring会先通过已经存在的environment查找该属性,所以你可以引用事先定义的值 app.name=appstore app.description=${app.name} is a spring boot application connection.username=root connection.password=roots
3、使用@value("${property}")注解注入配置属性有时会比较麻烦,特别是需要使用多个properties,或数据本身有层次结构。spring boot提供一种使用配置的替代方法,这种方法允许强类型的beans以管理和校验应用的配置,代码如下:
package com.rookie.bigdata.config; import org.springframework.boot.context.properties.configurationproperties; import org.springframework.context.annotation.configuration; import org.springframework.stereotype.component; /** * created by liuxili on 2018/9/29. */ //@component @configuration @configurationproperties(prefix = "connection") public class connectionconfig { private string username; private string password; public string getusername() { return username; } public void setusername(string username) { this.username = username; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } }
package com.rookie.bigdata.config; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.test.context.springboottest; import org.springframework.test.context.junit4.springrunner; import static org.junit.assert.*; /** * created by liuxili on 2018/9/29. */ @runwith(springrunner.class) @springboottest public class connectionconfigtest { @autowired private connectionconfig connectionconfig; @test public void test1(){ system.out.println(connectionconfig.getpassword()); system.out.println(connectionconfig.getusername()); } }
属性名配置一般规则如下:
属性 | 说明 |
---|---|
person.firstname |
标准驼峰规则 |
person.first-name |
虚线表示,推荐用于.properties 和.yml 文件中 |
person.first_name |
下划线表示,用于.properties 和.yml 文件的可选格式 |
person_first_name |
大写形式,使用系统环境变量时推荐 |
对于使用yml文件配置跟这里配置差不多,这里不再赘述,看个人喜好,有人喜好properties进行配置,有人喜好yml文件进行配置
上一篇: 记得有一次去老丈人家住了待了两天
下一篇: java实现简单的solr查询