GVKun编程网logo

在 spring boot 中的 application.yml 文件属性中分配系统属性(springboot中,在yml文件中配置属性)

5

对于想了解在springboot中的application.yml文件属性中分配系统属性的读者,本文将提供新的信息,我们将详细介绍springboot中,在yml文件中配置属性,并且为您提供关于7.S

对于想了解在 spring boot 中的 application.yml 文件属性中分配系统属性的读者,本文将提供新的信息,我们将详细介绍springboot中,在yml文件中配置属性,并且为您提供关于7.Spring Boot配置文件application.yml、IDEA开发spring boot应用时 application.yml 或 application.properties 自定义属性提示、Spring Boot 2 忽略在 application.yml 中设置的 HikariCP 属性、Spring Boot application.yml application.properties 优先级的有价值信息。

本文目录一览:

在 spring boot 中的 application.yml 文件属性中分配系统属性(springboot中,在yml文件中配置属性)

在 spring boot 中的 application.yml 文件属性中分配系统属性(springboot中,在yml文件中配置属性)

如何解决在 spring boot 中的 application.yml 文件属性中分配系统属性?

在我的 Spring Boot 应用程序中,我将值设置为如下所示 -

System.setProperty("INFLUX_PASSWORD",password);

ApplicationContext applicationContext = SpringApplication.run(MyApplication.class,args); 

application.yml 文件中,我将其用作 -

password: ${INFLUX_PASSWORD}

我的问题是,为 application.yml 文件中的属性分配动态值是正确的方法。 如何验证值已分配给 password 文件中的 application.yml 属性

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

7.Spring Boot配置文件application.yml

7.Spring Boot配置文件application.yml

一、创建配置文件

如图所示,我们在resources文件夹中新建配置文件application.yml

结构图

二、一些基本配置

server:  
  port: 8090  //配置端口
  session-timeout: 30  
  tomcat.max-threads: 0  
  tomcat.uri-encoding: UTF-8  
  
spring:  
  datasource:  //数据库配置
    url : jdbc:mysql://localhost:3306/newbirds  
    username : root  
    password : mymysql  
    driverClassName : com.mysql.jdbc.Driver  

注意:key后面的冒号,后面一定要跟一个空格

三 、自定义的配置

1、在application.yml文件中我们自己定义了age 、name 、manInfo等参数,其中manInfo引用了age、name,引用的格式"${参数名}"

server:
  //端口
  port: 8081 

age: 18
name: jason
manInfo: "age:${age},name:${name}"

怎么使用这些配置呢?我们创建GetManInfo文件(参照上面结构图),
使用配置格式

@Value("${配置文件中的参数名}")
类型 参数名

详细如下

package com.alun;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by Administrator on 2017/5/28.
 */
@RestController
public class GetManInfo {

//获取配置文件中的age
    @Value("${age}")
   private int age;

//获取配置文件中的name
    @Value("${name}")
    private String name;

//获取配置文件中的manInfo
    @Value("${manInfo}")
    private String manInfo;

    @RequestMapping(value = "/getAge",method= RequestMethod.GET)
    public  int getAge(){
     return age;
    }

    @RequestMapping(value = "/getName",method= RequestMethod.GET)
    public  String getNme(){
        return name;
    }

    @RequestMapping(value = "/getManInfo",method= RequestMethod.GET)
    public  String getManInfo(){
        return manInfo;
    }
}

2、一个一个的@Value获取觉得很烦,有办法解决么?这个....当然有啊!

在application.yml我们改成这样

server:
  port: 8081

manInfo:
    age: 18
    name: jason

新建一个ManInfoProperties文件,(结构参照结构图)使用
@Component
@ConfigurationProperties( prefix = "配置文件里的参数名" )

package com.alun;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * Created by Administrator on 2017/5/28.
 */
@Component
@ConfigurationProperties(  prefix = "manInfo" )
public class ManInfoProperties {
    private String age;
    private String name;

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

在GetManInfo里 使用 @Autowired

package com.alun;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by Administrator on 2017/5/28.
 */
@RestController
public class GetManInfo {

    @Autowired
    private ManInfoProperties manInfoProperties;

    @RequestMapping(value = "/getManInfo",method= RequestMethod.GET)
    public  String getManInfo(){
        return manInfoProperties.getAge();
    }
}

四、多环境配置

 

多环境配置

如上图,创建application-dev.yml(测试环境)和application-prod.yml(生产)环境

application-dev.yml

server:
  port: 8080

manInfo:
    age: 18
    name: jason

application-prod.yml

server:
  port: 8081

manInfo:
    age: 18
    name: alun

而原有的application.yml则改成这样:

spring:
  profiles:
    active: prod

spring.profiles.active: 配置文件名(比如这里是 prod或者dev)

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 2 忽略在 application.yml 中设置的 HikariCP 属性

Spring Boot 2 忽略在 application.yml 中设置的 HikariCP 属性

您正在使用 Spring Cloud 连接器库来创建数据库连接。

compile group: 'org.springframework.cloud',name: 'spring-cloud-cloudfoundry-connector',version: '2.0.7.RELEASE'
compile group: 'org.springframework.cloud',name: 'spring-cloud-spring-service-connector',version: '2.0.7.RELEASE'

此库位于 maintenance mode 中,不鼓励使用。不鼓励使用它的原因之一是它不能很好地与 Spring Boot 配置配合使用。当使用 cloudFactory.getCloud().getServiceConnector() 之类的连接器 API 创建服务连接 bean 时,Spring Boot 自动配置会退避并且忽略 spring.datasource.* 之类的属性。如果出于某种原因必须继续使用连接器,则您需要使用连接器 API 将池选项配置为 shown in the documentation。

更好的选择是移除对连接器的依赖并改用 Java CFEnv。

,

在遵循 Scott 的建议之后。我能够使其工作如下。

build.yml

implementation 'io.pivotal.cfenv:java-cfenv-boot:2.3.0'

application.yml 保持不变

CloudConfig.java

@Configuration
public class CloudConfig {

  @Primary
  @Bean(name = "myDataSource")
  @ConfigurationProperties("spring.datasource.hikari") // added this
  public DataSource becscmDataSource() {
    CfJdbcEnv cfJdbcEnv = new CfJdbcEnv();
    CfJdbcService myJdbc = cfJdbcEnv.findJdbcServiceByName("my-maria-rds");

    DataSourceBuilder builder = DataSourceBuilder.create();
    builder.url(myJdbc.getJdbcUrl());
    builder.username(myJdbc.getUsername());
    builder.password(myJdbc.getPassword());
    builder.driverClassName("org.mariadb.jdbc.Driver");
    return builder.build();
  }
}

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 文件属性中分配系统属性springboot中,在yml文件中配置属性的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于7.Spring Boot配置文件application.yml、IDEA开发spring boot应用时 application.yml 或 application.properties 自定义属性提示、Spring Boot 2 忽略在 application.yml 中设置的 HikariCP 属性、Spring Boot application.yml application.properties 优先级的相关信息,请在本站寻找。

本文标签: