标签:stat autowire 逗号 png 文件配置 变量 faq 输出 划线
版权声明:本文为CSDN博主「IT_faquir」的原创文章,遵循 CC 4.0 BY-SA 版权协议
原文链接:https://blog.csdn.net/IT_faquir/article/details/80869578
文章内容:
SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。
以设置应用端口为例:
properties文件示例(application.properties):
server.port=80
YAML文件示例(application.yml):
server:
port: 80
假如各配置文件都配置了不同的端口,那么SpringBoot会使用哪一个端口呢?带着疑问试验一下实例
4.结论:可见在同一目录下,properties配置优先级 > YAML配置优先级。//所以我们在jar包启动时带上properties写法的配置可以覆盖配置
SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。
可放置目录(优先级从高到低)
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载配置文件并互补配置;
我们可以从ConfigFileApplicationListener这类便可看出,其中DEFAULT_SEARCH_LOCATIONS属性设置了加载的目录:
private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";
接着getSearchLocations方法中去逗号解析成Set,其中内部类Loader负责这一配置文件的加载过程,包括加载profile指定环境的配置,以application+’-’+name格式的拼接加载。
多种目录配置同时存在情况
接下来还是以端口配置为例
最终运行结果:
Tomcat started on port(s): 7777 (http) with context path ‘/beedo‘ Started BeedoApplication in 4.544 seconds (JVM running for 5.335)
通过控制变量法得以论证
其优先级由高到底,高优先级的配置会覆盖低优先级的配置
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 @ConfigurationProperties通常用于将配置全量注入某个类中; @Value通常用于注入某一些特定配置值中;
标签:stat autowire 逗号 png 文件配置 变量 faq 输出 划线
原文地址:https://www.cnblogs.com/sanhao/p/12485660.html