微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringBoot配置加载,各配置文件优先级对比方式

这篇文章主要介绍了SpringBoot配置加载,各配置文件优先级对比方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

目录

1.SpringBoot配置文件

以设置应用端口为例

2.配置文件目录

3.自定义配置属性

自定义配置提示

4.指定配置文件

@PropertySource使用

装配yaml配置文件

@ImportResource使用

其他问题

idea使用*.properties文件出现中文乱码问题?

解决方法

1.SpringBoot配置文件

SpringBoot使用一个以application命名的配置文件作为认的全局配置文件支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。

以设置应用端口为例

properties文件示例(application.properties):

server.port=80

YAML文件示例(application.yml):

server: port: 80

yaml语法规范这里不多说

两者同时存在情况

假如各配置文件都配置了不同的端口,那么SpringBoot会使用哪一个端口呢?带着疑问试验一下实例

在resources目录下创建两个配置文件一个为application.yml配置文件,设置端口为8010,另一个为application.properties配置文件,设置端口为8020;

重启系统;

运行结果:

结论:可见在同一目录下,properties配置优先级 > YAML配置优先级。//所以我们在jar包启动时带上properties写法的配置可以覆盖配置

2.配置文件目录

SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。可放置目录(优先级从高到低)

file:./config/ (当前项目路径config目录下);

file:./ (当前项目路径下);

classpath:/config/ (类路径config目录下);

classpath:/ (类路径config下).

优先级由高到底,高优先级的配置会覆盖低优先级的配置

SpringBoot会从这四个位置全部加载配置文件互补配置

我们可以从ConfigFileApplicationListener这类便可看出,其中DEFAULT_SEARCH_LOCATIONS属性设置了加载的目录:

private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

接着getSearchLocations方法中去逗号解析成Set,其中内部类Loader负责这一配置文件的加载过程,包括加载profile指定环境的配置,以application+'-'+name格式的拼接加载

多种目录配置同时存在情况

接下来还是以端口配置为例

在resources/目录下配置文件设置端口为8888;

在resources/config目录下配置文件设置端口为9999;

在项目路径下配置文件设置端口为6666;

在项目路径config目录下配置文件设置端口为7777;

最终运行结果:

Tomcat started on port(s): 7777 (http) with context path '/beedo'

Started BeedoApplication in 4.544 seconds (JVM running for 5.335)

通过控制变量法得以论证

其优先级由高到底,高优先级的配置会覆盖低优先级的配置

3.自定义配置属性

SpringBoot提供了许多的配置,但通常情况我们需要自定义自己的配置应用自己的系统中,如你需要配置一个认的用户名密码做为系统的登录用。

首先创建一个实体类,作为配置注入用,并使用**@ConfigurationProperties注解进行批量注入, 也可以使用Spring底层注解

@Value("${user.username}")**的方式一个一个注入达到同意的效果

@Component @ConfigurationProperties(prefix = "user") public class Login{ private String username; private String password; ... }

或者@Value写法

@Component public class Login{ private String username; private String password; ... }

配置yaml文件

user: username: admin password: 123

或者properties文件

login.username=admin login.password=123

编写一个junit测试用例,看看配置的值是否正常注入:

@RunWith(springrunner.class) @SpringBoottest public class DeployApplicationTests { @Autowired private Login login; @Test public void contextLoads() { System.out.println(login); } }

输出结果上看,值已正常注入

Login{username=‘admin', password=‘123'}

比较项

@ConfigurationProperties

@Value

全量注入

支持

松散绑定(Relaxed binding)

支持

SpEL

支持

JSR303

支持

不支持

**松散绑定:**驼峰命名(userName)、横干拼接(user-name)、下划线(user_name)之间可以互相识别绑定称为做松散绑定 **JSR303:**通过@Email,@Nullable,@Digits 等等注解进行邮箱、判空、数字格式等等数据的校验,更多相关内容请参考IBM的中文文档:https://www.ibm.com/developerworks/cn/java/j-lo-JSR303/index.html @上一篇:Java强制保留两位小数的四种方法案例详解下一篇:Java之OutputStreamWriter流案例详解

热门搜索

配置对比 

配置加载 

配置方式 

分配优先级 

文件配置 

相关文章

SpringBoot配置加载,各配置文件优先级对比方式

2021-09-10阅读(10383)评论(0)推荐()

这篇文章主要介绍了SpringBoot配置加载,各配置文件优先级对比方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

详解Spring Boot读取配置文件配置文件优先级

2021-10-18阅读(2982)评论(0)推荐()

这篇文章主要介绍了详解Spring Boot读取配置文件配置文件优先级,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Mybatis Properties 配置优先级详解

2021-10-18阅读(4175)评论(0)推荐()

这篇文章主要介绍了Mybatis Properties 配置优先级,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis 加载配置文件方法(两种方式)

2021-11-19阅读(8318)评论(0)推荐()

这篇文章主要介绍了mybatis 加载配置文件方法,通过实例代码给大家介绍了mybatis 加载配置文件的两种方式,需要的朋友可以参考下

IIS下PHP的三种配置方式对比

2021-11-11阅读(9025)评论(0)推荐()

本文对比分析了IIS下配置PHP的三种配置方式,以及这三种方式配置的区别和性能差异。

SpringBoot配置文件的加载位置实例详解

2021-10-10阅读(8721)评论(0)推荐()

springboot采纳了建立生产就绪spring应用程序的观点。 在一些特殊的情况下,我们需要做修改一些配置,或者需要有自己的配置属性。接下来通过本文给大家介...

spring如何加载配置多个配置文件

2021-09-19阅读(10240)评论(0)推荐()

这篇文章主要介绍了spring如何加载配置多个配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

取消

有人回复邮件通知

提交评论

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐