GVKun编程网logo

如何在springboot中从application.yml读取带有特殊字符的属性(springboot读取application.yml值)

11

对于如何在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值)

如何在springboot中从application.yml读取带有特殊字符的属性(springboot读取application.yml值)

application.yml

mobile-type:  mobile-codes:    BlackBerry: BBSS    Samsung: SAMS    Samsung+Vodafone: SAMSVV
  1. 从应用程序yml文件读取(Samsung + Vodafone)键时,我们正在获取。将String格式连接为’SamsungVodafone’。

  2. 此外,我们还尝试了“ Samsung” / +“ Vodafone”:SAMSVV,但是结果是相同的,我们尝试了其他符号,例如“-”,因此它可以正常工作。

  3. 用于从应用程序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 自定义属性提示

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 优先级

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>&nbsp;</p>

<p>Spring Boot 虽然做了大量的工作来简化配置,但其配置依然是相当的复杂!</p>

<p> 支持的外部配置方式就高达 17 种之多,当然这很灵活,但灵活就意味着复杂度的提升。</p>

<p>&nbsp;</p>

<p>&nbsp; 这里只说说 & nbsp;application.yml 和 application.properties 两个文件的优先级 </p>

<p>&nbsp;</p>

<p> 如果你的项目中存在 & nbsp;<span>application.properties 文件,</span></p>

<p><span> 那么 & nbsp;<span>application.yml 文件就只是一个摆设。</span></span></p>

<p>&nbsp;</p>

<p><span><span> 为什么这么说呢?</span></span></p>

<p><span><span> 我在 & nbsp;<span>application.properties</span> 文件中配置了:</span></span></p>

<p>server.port=8085</p>

<p>&nbsp;</p>

<p> 在 & nbsp;<span>application.yml 文件中配置了:</span></p>

<p>server:</p>

<p>&nbsp; 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>&nbsp;<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; 或者 & nbsp;&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; 后 & 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

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 中指定:

  1. spring.application.name
  2. spring.cloud.config.server.git.uri
  3. 一些加密 / 解密信息

实例:

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 的区别

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 的区别的相关信息,请在本站查询。

本文标签: