学习两个注解: @PropertySource   @ImportResource  ↓
 
@ConfigurationProperties 
  • 与 @Bean 结合为属性赋值
  • @PropertySource (只能用于properties文件)结合读取指定文件
:: @PropertySource : 加载指定的文件
 
将原来application.properties中的person的配置字段
放入单独的person.properties中.
并在person类上加上该注解
@PropertySource(value = {"classpath:person.properties"})
public class Person {
 

 
 
 
@ImportResource 读取外部配置文件 不推荐
导入Spring的配置文件,让配置文件里面的内容生效.
SpringBoot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别.
想让Spring的配置文件生效,加载进来, 需要@ImportResource标注在一个配置类上
这里放在启动类上:
@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class Demo11Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Demo11Application.class, args);
    }
}
 
不推荐:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <bean id="helloService" class="com.example.demo11.service.HelloService"></bean>
 
</beans>
SpringBoot推荐给容器中添加组件的方式: 推荐使用全注解的方式:
  1. 配置类 ===== 类似Spring配置文件
  2. 使用@Bean给容器中添加组件:
package com.example.demo11.config;
 
import com.example.demo11.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
* @Configuration : 指明当前类是一个配置类,就是来替代之前的Spring配置文件
* 在配置文件中用<bean></bean>标签添加组件.
*/
@Configuration
public class MyAppConfig {
 
    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService(){
        System.out.println("配置类@Bean给容器添加组件了.");
        return new HelloService();
    }
}
 
 

>

|

>

之前的@ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值.

使用@PropertySource注解可以从自建的配置文件中获取值,((只能用于properties文件)

新建一个person.properties文件,将原本的application.properties中person的字段剪切过去.

在bean上这样声明:

@PropertySource(value = {"classpath:person.properties"})
public class Person { 同样能获取值

Spring官方不推荐这种方式,不仅要写xml也与SpringBoot宗旨不符合.
推荐使用一个配置类来做配置:
创建一个config包,创建一个配置类:
MyAppConfig:
package com.example.demo11.config;

import com.example.demo11.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @Configuration : 指明当前类是一个配置类,就是来替代之前的Spring配置文件
* 在配置文件中用<bean></bean>标签添加组件.
*/
@Configuration
public class MyAppConfig { //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
@Bean
public HelloService helloService(){
System.out.println("配置类@Bean给容器添加组件了.");
return new HelloService();
}
}
 
Profile
1.多Profile文件
我们在主配置文件编写的时候,文件名可以是: application-{profile}.properties.yml
程序会默认使用application.properties的配置:
在默认的配置文件application.properties中,激活application-dev.properties环境

2.yml支持多文档块方式 ( 以 --- 隔开配置 用active激活某个文档块中的配置 )

多profile文档块模式:

application.yml :

server:
port: 8081
spring:
profiles:
# active: prod
active: dev #做为指定环境,激活哪个环境 --- server:
port: 8083
spring:
profiles: dev --- server:
port: 8084
spring:
profiles: prod #指定属于哪个环境 ---

3.激活指定profile

- 在配置文件中指定要激活哪个配置: ( application.properties )

application.properties :

#激活环境properties
spring.profiles.active=dev

- 命令行方式激活某配置 :

除了在IDEA的Terminal也可以右键target, [Show in Explorer],找到jar或war包文件目录,在路径上覆盖写入cmd回车即打开该文件目录的cmd

java -jar demoxxxxx.war --spring.profiles.active=dev

可以看到其运行端口已经换位dev的8083

- 配置IDEA的Edit Configurations设置 :  ( Program arguments 程序参数 )

在IDEA的Edit Configurations设置: Program arguments 字段 :

--spring.profiles.active=dev

- 配置JVM ( java虚拟机 ) 参数 : ( VM options 虚拟机选项 )

-Dspring.profiles.active=dev

 
 补充:
配置文件加载位置:
springboot启动会扫描以下位置的application.properties或者application.yml文件做为springboot的默认配置文件
  • file: ../config/
  • file:../
  • classpath:/config/
  • classpath:/
以上都是按照优先级从高到底的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容.
我们也可以通过配置spring.config.location来改变默认配置
SpringBoot会从这四个位置全部加载主配置文件: 互补配置.(下面提到)
 
重要:补充
在整体项目中建立config文件夹: 其中的application.properties会最优先执行.
也就是在项目的最外层建立文件夹config为最优先级,即上面的file:../config/ 其次是直接不在config文件夹直接在外面建立配置文件,
这样的配置文件都要比classpath也就是 resources 下面的优先级要高.
 
 
 
在有config文件夹时,如果外面classpath还有配置application.yml时,如果
只是
server:
  port: 8081
那么还是会执行config文件夹下的配置.
但是如果在classpath中使用的是:
spring:
  profiles:
     active: dev
---
 
server:
  port: 8083
spring:
  profiles: dev
那么还是会先执行这里的yml激活的8083端口.
 
如果在config文件夹下有application.properties和application.yml
指定了不同端口而yml没有激活active指定配置代码块,那么会读取properties的配置.
 

 
同样,在IDEA的Edit配置中,使用-Dspring.profiles.active=dev,如果在config和classpath中的yml
都有dev环境时,会优先指定config目录下的.
在使用java -jar xxxx.jar --spring.profiles.active=prod 时,即使在Edit Configurations指定了-Dspring.profiles.active=dev,
但是还是会使用prod的配置.这是命令行的最优先级.
 

 
上面提到互补配置:
即是说在config中的配置端口会执行,但是如果classpath中的配置文件多了一个配置如:
server.servlet.context-path=/boot123
那么在项目启动后,该路径也会加载进来.
 
 
 
 
 

[SpringBoot] - 配置文件的多种形式及优先级的更多相关文章

  1. [SpringBoot] - 配置文件的多种形式及JSR303数据校验

    Springboot配置文件: application.yml   application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...

  2. SpringBoot配置文件的加载优先级顺序

    application.properties加载 Spring Boot启动会扫描以下位置的application.properties或者application.yml文件作为Spring Boot ...

  3. SpringBoot 配置文件存放位置及读取顺序

    SpringBoot配置文件可以使用yml格式和properties格式 分别的默认命名为:application.yml.application.properties 存放目录 SpringBoot ...

  4. SpringBoot——配置文件加载位置及外部配置加载顺序

    声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...

  5. 【SpringBoot】SpringBoot配置文件及YAML简介(三)

    SpringBoot配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改Spr ...

  6. springboot配置文件之yml的语法学习

    springboot配置文件(.yml/.yaml.properties) YAML(YAML Ain't Markup Language) YAML A Markup Language:是一个标记语 ...

  7. springboot 配置文件的加载顺序

    springboot 配置文件的加载顺序1.在命令行中传入的参数.2. SPRING APPLICATION JSON中的属性. SPRING_APPLICATION—JSON是以JSON格式配置在系 ...

  8. SpringBoot学习笔记(三)——Springboot配置文件

    SpringBoot不像之前用spring+springMVC做项目的时候,他不需要配置大量的看上去很乱很复杂的xml配置文件.在SpringBoot中你可以通过java代码和注解配置项目,也可以通过 ...

  9. SpringBoot配置文件(2)

    六.配置文件加载 SpringBoot 启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件 file:./co ...

随机推荐

  1. SSH配置优化和慢的解决方法

    author: headsen chen date: 2018-08-18  00:28:37 ssh配置优化 vim  /etc/ssh/sshd_config 1,修改root端口 2,不允许ro ...

  2. 【BZOJ1877】[SDOI2009]晨跑 最小费用最大流

    [BZOJ1877][SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现 ...

  3. OC开发_Storyboard——Core Data

    一 .NSManagedObjectContext 1.我们要想操作Core Data,首先需要一个NSManagedObjectContext2.那我们如何获得Context呢:创建一个UIMana ...

  4. vue 缓存的keepalive页面刷新数据

    用到这个的业务场景是这样的: a页面点击新建列表按钮进入到新建的页面b,填写b页面并点击b页面确认添加按钮,把这些数据带到a页面,填充到列表(数组),可以添加多条, 点击这条的时候进入到编辑页面,确认 ...

  5. open live writer 安装 markdown 插件

    我自己用的是 OpenLiveWriter ,所以本篇只讲 OLW 的,WindowsLiveWriter 戳 MarkdownInWindowsLiveWriter,OpenLiveWriter 戳 ...

  6. Redis集群管理(二)

    1.进入集群客户端 任意选一个redis节点,进入redis 所在目录 cd /redis 所在目录/src/ ./redis-cli -h 本地节点的ip -p redis的端口号 -a 密码 [r ...

  7. CSU 1808 地铁 (Dijkstra)

    Description Bobo 居住在大城市 ICPCCamp. ICPCCamp 有 n 个地铁站,用 1,2,-,n 编号. m 段双向的地铁线路连接 n 个地铁站,其中第 i 段地铁属于 ci ...

  8. .net各版本framework官方下载地址

    版本 链接 说明 Microsoft .NET Framework 4(独立安装程序) https://www.microsoft.com/zh-cn/download/details.aspx?id ...

  9. vs 开发常用快捷键

    alt+shift+enter    编辑区最大化ctrl+]        括号匹配 ctrl+j        强迫智能感知ctrl+shift+空格    强迫智能感知(参数) ctrl+k+d ...

  10. 小米范工具系列之六:小米范 web查找器2.x版本发布

    小米范web查找器是一款快速识别端口及服务的小工具. 此工具使用java 1.8以上版本运行. 下载地址:http://pan.baidu.com/s/1c1NDSVe  文件名web finder ...