对于如何在springboot中从application.yml读取带有特殊字符的属性感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解springboot读取application.yml值
对于如何在springboot中从application.yml读取带有特殊字符的属性感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解springboot读取application.yml值,并且为您提供关于IDEA开发spring boot应用时 application.yml 或 application.properties 自定义属性提示、Spring Boot application.yml application.properties 优先级、Spring Boot application.yml bootstrap.yml、Spring Boot 中 application.yml 与 bootstrap.yml 的区别的宝贵知识。
本文目录一览:- 如何在springboot中从application.yml读取带有特殊字符的属性(springboot读取application.yml值)
- IDEA开发spring boot应用时 application.yml 或 application.properties 自定义属性提示
- Spring Boot application.yml application.properties 优先级
- Spring Boot application.yml bootstrap.yml
- Spring Boot 中 application.yml 与 bootstrap.yml 的区别
如何在springboot中从application.yml读取带有特殊字符的属性(springboot读取application.yml值)
application.yml
mobile-type: mobile-codes: BlackBerry: BBSS Samsung: SAMS Samsung+Vodafone: SAMSVV
从应用程序yml文件读取(Samsung + Vodafone)键时,我们正在获取。将String格式连接为’SamsungVodafone’。
此外,我们还尝试了“ Samsung” / +“ Vodafone”:SAMSVV,但是结果是相同的,我们尝试了其他符号,例如“-”,因此它可以正常工作。
用于从应用程序yml文件中读取键和值。我们已经写了下面的代码。
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = “mobile-type”)
@Component
public class mobileTypeConfig {Map<String, String> mobileCodes; public Map<String, String> getMobileCodes() { return mobileCodes; } public void setMobileCodes(Map<String, String> mobileCodes) { this.mobileCodes= mobileCodes; }
}
注意:Spring Boot版本2.0.6.RELEASE
答案1
小编典典使用方括号不要转义任何字符并将其编码为双引号
mobile-type: mobile-codes: BlackBerry: BBSS Samsung: SAMS "[Samsung+Vodafone]": SAMSVV
输出量
{BlackBerry=BBSS, Samsung=SAMS, Samsung+Vodafone=SAMSVV}
捆绑
绑定到Map属性时,如果键包含小写字母数字字符或-以外的任何其他字符,则需要使用方括号表示法,以便保留原始值。如果键没有被[]包围,则所有非字母数字或-
的字符都将被删除。例如,考虑将以下属性绑定到Map:
acme: map: "[/key1]": value1 "[/key2]": value2
IDEA开发spring boot应用时 application.yml 或 application.properties 自定义属性提示
在使用spring boot开发过程中,经常会定义一些应用自己的属性,直接写到application配置文件中使用@Value注解进行使用,这样使用也没有什么问题。不过我认为更优雅的方式是定义自己的属性类统一管理,这样在idea中,既能自动提示,又能对配置进行分类管理,显得有条不紊,下面是具体的配置步骤。
第一步:添加依赖(分为maven和gradle两种方式)
1.1 如果你使用的是maven
增加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
1.2 如果你使用的是gradle
增加依赖并且配置annotationProcessor
compileOnly ''org.springframework.boot:spring-boot-configuration-processor''
annotationProcessor ‘org.springframework.boot:spring-boot-configuration-processor’
第二步:创建配置属性类
@Data
@ConfigurationProperties(prefix = “myapp.prefix")
public class MyAppProperties {
private String prop1;
private int prop2;
}
第三步:在配置类中增加注解
@Configuration
@EnableConfigurationProperties(MyAppProperties.class)
public class MyConfig {
}
第四步:使用属性类
@Component
public class MyComponent {
private final MyAppProperties properties;
public MyComponent(MyAppProperties properties) {
this.properties = properties;
}
// 现在可以使用了
}
对了,别忘记配置你的application.yml
myapp:
prefix:
prop1: 1111
prop2: 2222
或 application.properties
myapp.prefix.prop1=1111
myapp.prefix.prop2=2222
另外需要注意:如果想要idea中自动提示生效,需要重新运行你的应用,有时候没那么快生效。
Spring Boot application.yml application.properties 优先级
<divid="article_content" data-mod="popu_307" data-dsm="post" data-pid="blog"> <div> <svg xmlns="http://www.w3.org/2000/svg" title="CSDN 认证原创"aria-hidden="true"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#CSDN_Cert" /> </svg>
转载:https://blog.csdn.net/testcs_dn/article/details/79010798
<p>stackoverflow 上有个问题是:<ahref="https://stackoverflow.com/questions/31970576/can-application-properties-and-application-yml-be-mixed" target="_blank" rel="nofollow">Can application.properties and application.yml be mixed?</a></p>
<p> </p>
<p>Spring Boot 虽然做了大量的工作来简化配置,但其配置依然是相当的复杂!</p>
<p> 支持的外部配置方式就高达 17 种之多,当然这很灵活,但灵活就意味着复杂度的提升。</p>
<p> </p>
<p> 这里只说说 & nbsp;application.yml 和 application.properties 两个文件的优先级 </p>
<p> </p>
<p> 如果你的项目中存在 & nbsp;<span>application.properties 文件,</span></p>
<p><span> 那么 & nbsp;<span>application.yml 文件就只是一个摆设。</span></span></p>
<p> </p>
<p><span><span> 为什么这么说呢?</span></span></p>
<p><span><span> 我在 & nbsp;<span>application.properties</span> 文件中配置了:</span></span></p>
<p>server.port=8085</p>
<p> </p>
<p> 在 & nbsp;<span>application.yml 文件中配置了:</span></p>
<p>server:</p>
<p> port: 8086</p>
<p> 启动项目,控制台输出:</p>
<p><span>main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8085 (http)</span></p>
<p> 充分说明了这一点。</p>
<p> 你可能还会关注:<span><strong><a href="http://blog.csdn.net/testcs_dn/article/details/78959700" target="_blank" rel="nofollow">application.properties 文件和 application.yml 文件有什么区别呢?</a></strong></span></p>
<h1><a name="t0"></a>2018-09-26 更新 </h1>
<p> 更新一下对这两个文件的认识,</p>
<p> 其实 & nbsp;<span><span>application.yml </span></span > 文件会被优先加载,</p>
<p> 而如果同时存在 & nbsp;<span>application.properties 文件,并且存在相同的配置,</span></p>
<p><span> 那么则会用 </span> <span>application.properties 文件中的配置覆盖之前的配置;</span></p>
<p><span> 也就是说哪个文件被最后加载,哪个才具有最高级别,</span></p>
<p><span> 因为最后的,会覆盖前面所有的。</span></p>
<h1><a name="t1"></a>2019-02-22 更新 </h1>
<p> 一直比较懒,没去跟踪代码看看底层的究竟;</p>
<p> 关注这个的人还挺多,但何必在这个问题上纠结呢!</p>
<p> 喜欢哪种格式的就用哪种,不要让两种同时存在就好了。</p>
<h1><a name="t2"></a>2019-02-25 更新 </h1>
<p> 有些人可能喜欢追求问题的根源,或者说真相,我这里也看看。</p>
<p> 我的方法:</p>
<p>1、application.properties 文件中加入:</p>
<prename="code"><code>logging.level.root= debug</code><divonclick="hljs.signin (event)" data-title="登录后复制"></div></pre>
<p> 你在 application.yml 中也可以,注意格式。</p>
<p>2、Eclipse 控制台日志输出调大一点,不然可能显示不全 </p>
<p> 控制台窗口空白处右键,首选项 </p>
<p><img width="330" height="427"alt="" src="https://img-blog.csdnimg.cn/20190225171920688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly93ZWl4aWFvLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70"></p>
<p><img width="714" height="620"alt="" src="https://img-blog.csdnimg.cn/20190225171834909.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly93ZWl4aWFvLmJsb2cuY3Nkbi5uZXQ=,size_16,color_FFFFFF,t_70"></p>
<p>3、启动项目 </p>
<p> 查找 & nbsp;application.properties 或者 & nbsp; application.yml</p>
<p> 我这里会看到以下输出:</p>
<prename="code"><code><ol><li><div><divdata-line-number="1"></div></div><div><div> <span>2019</span>/<span>02</span>/<span>25</span>-<span>16</span>:<span>25</span>:<span>46</span> [main] DEBUG org.springframework.boot.context.config.ConfigFileApplicationListener- Loaded config <span>file</span> <span>''file:/Users/aven/Documents/workspace/fams/fams/target/classes/application.properties''</span> (classpath:/application.properties)</div></div></li><li><div><divdata-line-number="2"></div></div><div><div> <span>2019</span>/<span>02</span>/<span>25</span>-<span>16</span>:<span>25</span>:<span>46</span> [main] DEBUG org.springframework.boot.context.config.ConfigFileApplicationListener- Loaded config <span>file</span> <span>''file:/Users/aven/Documents/workspace/fams/fams/target/classes/application.yml''</span> (classpath:/application.yml)</div></div></li></ol></code><divonclick="hljs.signin (event)" data-title="登录后复制"></div></pre>
<p> 可以看到,从加载顺序上是:先 & nbsp;application.properties 后 & nbsp; application.yml。</p>
<p> 但是这里有一个坑,你接着会看到:</p>
<prename="code"><code><ol><li><div><divdata-line-number="1"></div></div><div><div> <span>2019</span>/<span>02</span>/<span>25</span>-<span>16</span>:<span>25</span>:<span>46</span> [main] DEBUG org.springframework.boot.context.config.ConfigFileApplicationListener- Skipped (empty) config <span>file</span> <span>''file:/Users/aven/Documents/workspace/fams/fams/target/classes/application.properties''</span> (classpath:/application.properties) <span>for</span> profile <span>default</span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div> <span>2019</span>/<span>02</span>/<span>25</span>-<span>16</span>:<span>25</span>:<span>46</span> [main] DEBUG org.springframework.boot.context.config.ConfigFileApplicationListener- Skipped (empty) config <span>file</span> <span>''file:/Users/aven/Documents/workspace/fams/fams/target/classes/application.yml''</span> (classpath:/application.yml) <span>for</span> profile <span>default</span></div></div></li></ol></code><divonclick="hljs.signin (event)" data-title="登录后复制"></div></pre>
<p>Skipped (empty) config file xxx for profile default</p>
<p> 我 E 文不好,这是 “跳过(空)配置文件 xxx” 的意思吧?</p>
<p> 我去对应的目录下看了,文件确实存在的,怎么说是空的呢?</p>
<p> 再往下找,往下看:</p>
<prename="code"><code><ol><li><div><divdata-line-number="1"></div></div><div><div><span>2019</span>/<span>02</span>/<span>25</span><span>-16</span>:<span>26</span>:<span>17</span> [main] DEBUG org.springframework.web.context.support.StandardServletEnvironment- Adding PropertySource <span>''applicationConfig: [classpath:/application.properties]''</span> <span>with</span> search precedence immediately lower than <span>''applicationConfigurationProperties''</span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div> <span>2019</span>/<span>02</span>/<span>25</span><span>-16</span>:<span>26</span>:<span>17</span> [main] DEBUG org.springframework.web.context.support.StandardServletEnvironment- Adding PropertySource <span>''applicationConfig: [classpath:/application.yml]''</span> <span>with</span> search precedence immediately lower than <span>''applicationConfig: [classpath:/application.properties]''</span></div></div></li><li><div><divdata-line-number="3"></div></div><div><div> <span>2019</span>/<span>02</span>/<span>25</span><span>-16</span>:<span>26</span>:<span>17</span> [main] DEBUG org.springframework.web.context.support.StandardServletEnvironment- Removing PropertySource <span>''applicationConfigurationProperties''</span></div></div></li><li><div><divdata-line-number="4"></div></div><div><div> <span>2019</span>/<span>02</span>/<span>25</span><span>-16</span>:<span>26</span>:<span>17</span> [main] DEBUG org.springframework.web.context.support.StandardServletEnvironment- Removing PropertySource <span>''defaultProperties''</span></div></div></li></ol></code><divonclick="hljs.signin (event)" data-title="登录后复制"></div></pre>
<p>Adding PropertySource ''applicationConfig: [classpath:/application.yml]'' with search precedence immediately lower than ''applicationConfig: [classpath:/application.properties]''</p>
<p><strong > 这是说 & nbsp;application.yml 的优先级低于 & nbsp;application.properties 吧?</strong></p>
<p> 到这里结果是不是很明确了呢?</p>
<p> 噢,对了,我的版本是:spring-boot-1.5.9.RELEASE</p>
<p> 有很多文章从代码里面分析,搞的我一看就头大;</p>
<p> 我这里只是简单的从日志输出来分析,</p>
<p> 如果你还不满意,可以根据日志输出提示的类,</p>
<p> 跟踪一下,看看代码上具体是怎么实现的!</p> </div>
Spring Boot application.yml bootstrap.yml
yml 与 properties
其实 yml 和 properties 文件是一样的原理,且一个项目上要么 yml 或者 properties,二选一的存在。
推荐使用 yml,更简洁。
bootstrap 与 application
1. 加载顺序
这里主要是说明 application 和 bootstrap 的加载顺序。
- bootstrap.yml(bootstrap.properties)先加载
- application.yml(application.properties)后加载
bootstrap.yml 用于应用程序上下文的引导阶段。
bootstrap.yml 由父 Spring ApplicationContext 加载。
父 ApplicationContext 被加载到使用 application.yml 的之前。
2. 配置区别
bootstrap.yml 和 application.yml 都可以用来配置参数。
- bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
- application.yml 可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。
使用 Spring Cloud Config Server 时,应在 bootstrap.yml 中指定:
- spring.application.name
- spring.cloud.config.server.git.uri
- 一些加密 / 解密信息
实例:
bootstrap.yml
spring:
application:
name: service-a
cloud:
config:
uri: http://127.0.0.1:8888
fail-fast: true
username: user
password: ${CONFIG_SERVER_PASSWORD:password}
retry:
initial-interval: 2000 max-interval: 10000 multiplier: 2 max-attempts: 10
当使用 Spring Cloud 时,通常从服务器加载 “real” 配置数据。为了获取 URL(和其他连接配置,如密码等),您需要一个较早的或 “bootstrap” 配置。因此,您将配置服务器属性放在 bootstrap.yml 中,该属性用于加载实际配置数据(通常覆盖 application.yml [如果存在] 中的内容)。
当然,在一些情况上不用那么区分这两个文件,你只需要使用 application 文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。
Spring Boot 中 application.yml 与 bootstrap.yml 的区别
说明:其实 yml 和 properties 文件是一样的原理,主要是说明 application 和 bootstrap 的加载顺序。且一个项目上要么 yml 或者 properties,二选一的存在。
Bootstrap.yml(bootstrap.properties)在 application.yml(application.properties)之前加载,就像 application.yml 一样,但是用于应用程序上下文的引导阶段。它通常用于 “使用 Spring Cloud Config Server 时,应在 bootstrap.yml 中指定 spring.application.name 和 spring.cloud.config.server.git.uri” 以及一些加密 / 解密信息。技术上,bootstrap.yml 由父 Spring ApplicationContext 加载。父 ApplicationContext 被加载到使用 application.yml 的之前。
例如,当使用 Spring Cloud 时,通常从服务器加载 “real” 配置数据。为了获取 URL(和其他连接配置,如密码等),您需要一个较早的或 “bootstrap” 配置。因此,您将配置服务器属性放在 bootstrap.yml 中,该属性用于加载实际配置数据(通常覆盖 application.yml [如果存在] 中的内容)。
当然,在一些情况上不用那么区分这两个文件,你只需要使用 application 文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。
我们今天的关于如何在springboot中从application.yml读取带有特殊字符的属性和springboot读取application.yml值的分享已经告一段落,感谢您的关注,如果您想了解更多关于IDEA开发spring boot应用时 application.yml 或 application.properties 自定义属性提示、Spring Boot application.yml application.properties 优先级、Spring Boot application.yml bootstrap.yml、Spring Boot 中 application.yml 与 bootstrap.yml 的区别的相关信息,请在本站查询。
本文标签: