一、SpringBoot注解 @PropertySource 和 @ImportResource和@Bean

  1.@PropertySource 加载指定位置的配置文件(只能是properties文件)

@PropertySource(value={"classpath:person.properties"})//加载指定位置下的properties文件。默认是加载类路径下的application.properties
@ConfigurationProperties(prefix = "person")//将类的所有属性和配置文件指定开始位置进行绑定
@Component//@ConfigurationProperties的运行依赖@Compont
public class Person { private String name;
private String color;
private Boolean boss; private Cart cart;

    

  配置文件如下:

person.name=独而不孤
person.color=白色
person.boss=true
person.cart.name=奥迪
person.cart.color=白色
person.list=[111,111,222]
person.map.k1=v1
person.map.k2=v2

  2.@ImportReSource 用来让spring配置文件生效

  原因:SpringBoot没有Spring配置文件,自己的的Spring配置文件不能让SpringBoot自动识别,想让spring生效,就要手动指定加载。

//还记得Spring配置文件需要写<bean></bean>,使用注解方式可以直接省去这些步骤
@Configuration  //指定该类是一个Spring配置类
public class MyConfig { @Bean //将方法的返回值添加到容器中,id是方法名-------->取代了<bean id="" class=""><bean/>这种形式
public HelloController helloController(){
return new HelloController();
} }

    测试效果如下:为True

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDay01ApplicationTests { @Autowired
ApplicationContext ioc;
@Test
public void test1() {
boolean b= ioc.containsBean("helloController");
System.out.println("spring容器"+b);
} }

  3.@Bean(如上面代码中指定方法进入spring容器)

二、配置文件占位符、

   1.随机数(只能是application.properties文件中)

    

    运行效果:

  2.配置文件占位符也是这样

三、profile多环境配置

  1.SpringBoot配置文件主要有两种application.properties和application.yml除此之外,还可以是application-{profile}.properties/.yml文件。

   但是application-{profile}.properties文件需要在主配置文件application.properties中被激活。

  激活代码如下。

  

spring.profiles.active=pro

  2.application.yml支持多文档块方式配置。(内置激活配置)

server:
port: 8090
spring:      //----通过这种方式可以激活yml多环境配置
profiles:
active: dev
---
server:
port: 8091
spring:
profiles: dev
---
server:
port: 8092
spring:
profiles: pro

   3.激活指定的profile文件(properties)

      3.1 通过在application.properties方式激活,上面已经提过。

      3.2 通过命令行方式加载多环境配置文件。代码:java -jar springboot_day01-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

        

      3.3 通过虚拟机参数配置多环境配置。

        

        运行效果:

        

      3.4 还有一种神奇的操作,即使项目打包后,也可以加载配置。

        项目打包后,我们可以通过命令行参数的形式,重新启动项目的jar包来指定外部的指定的配置文件,指定的配置文件和默认的配置文件会共同起作用,形成互补作用。代码如下:“java -jar 项目.jar --spring.config.location=G:/配置名称”

      代码:  

java -jar springboot_day01-0.0.1-SNAPSHOT.jar --spring.config.location=f:/application123.properties

        

      运行效果:

        

    4.全局配置文件的加载顺序。(application.properties和application.yml)

        SpringBoot启动会默认在以下位置扫描application.properties和application.yml配置文件。

        --项目工程/config文件夹/

        --项目工程下

        --classpath:/config/  (classpath在项目的resource文件夹下的位置)

        --classpath:/

      以上优先级从上到下有高到低,高优先级会覆盖低优先级,如果配置有覆盖,会形成互补配置。

    5.外部配置加载顺序(常见的配置是黑色字体)

        SpringBoot也可以从以下位置加载配置文件,配置文件优先级从高到低,高优先级会覆盖低优先级的配置文件,所有的配置会形成互补的配置。 

1.命令行参数

所有的配置都可以在命令行上进行指定

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc多个配置用空格分开; --配置项=值

2.来自java:comp/env的JNDI属性

3.Java系统属性(System.getProperties())

4.操作系统环境变量

5.RandomValuePropertySource配置的random.*属性值

(钻牛角尖中:如果application.properties和application.yml同时存在,会先加载.properties,然后在加载yml,所以会以properties为准,如果没有配置然后再加载.yml文件)

==由jar包外向jar包内进行寻找;==

==优先加载带profile==

6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

==再来加载不带profile==//在和jar包同一个目录下就会自加载

8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件

9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件

10.@Configuration注解类上的@PropertySource

11.通过SpringApplication.setDefaultProperties指定的默认属性

所有支持的配置加载来源;

Spring Boot 注解配置 day03的更多相关文章

  1. Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件

    本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...

  2. 玩转spring boot——properties配置

    前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连 ...

  3. Spring Boot 属性配置和使用

    Spring Boot 属性配置和使用 Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot ...

  4. Spring Boot 属性配置和使用(转)

    Spring Boot 属性配置和使用 Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot ...

  5. Spring Boot 注解详解

    一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...

  6. Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置

    该篇为Sping Boot入门到实战系列入门篇的第四篇.介绍Spring Boot自动化配置的基本原理与实现.   Spring Boot之所以受开发者欢迎, 其中最重要的一个因素就是其自动化配置特性 ...

  7. Java 小记 — Spring Boot 注解

    前言 本篇随笔将对 Spring Boot 中的常用注解做一个简单的整理归档,写作顺序将从启动类开始并逐步向内外扩展,目的即为了分享也为了方便自己日后的回顾与查阅. 1. Application 启动 ...

  8. Springboot 系列(三)Spring Boot 自动配置原理

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 关于配置文件可以配置的内容,在 Spring ...

  9. Spring Boot自动配置与Spring 条件化配置

    SpringBoot自动配置 SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,简化开发时间,无需浪费时间讨论具体的Spring配置,只需考虑如何利用SpringBoot的自动配置即 ...

随机推荐

  1. mycat偶尔会出现JVM报错double free or corruption并崩溃退出

    mycat偶尔会出现JVM报错double free or corruption并崩溃退出 没有复杂的sql,也没有大量的io INFO | jvm | // :: | *** Error in `j ...

  2. SNF软件开发机器人-子系统-导出-导入功能-多人合作时这个功能经常用到

    导出 导出可以将资源表和子系统导出并形成一个json文件. 1.效果展示: 2.使用说明: 点击导出按钮后会弹出一个导出页面.页面的左侧可以选择功能,右侧可以选择资源表,选择功能的同时右侧中功能所需的 ...

  3. invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

    Mac系统升级git会找不到并且报错:xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools) ...

  4. crawler_exa2

    优化中... #! /usr/bin/env python # -*- coding:utf-8 -*- # Author: Tdcqma ''' v17.0920.1401 基本功能实现,漏洞标题与 ...

  5. A*算法详解链接

    A星算法详解(个人认为最详细,最通俗易懂的一个版本) Introduction to the A* Algorithm 路径规划: a star, A星算法详解 实现A星算法

  6. hdoj:2055

    #include <iostream> #include <string> using namespace std; bool islower(char ch) { if (c ...

  7. SecureCRT自动上传文件python脚本

    本人在ubuntu下使用SecureCRT,上传文件习惯用rz命令.每次上传都弹对话框选择文件按确定后才上传,感觉很费力.最后自己摸索整理出一个脚本. 使用方法是,在[Script]菜单点[Run.. ...

  8. js 原型链和继承(转)

    在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的 new 到底是干什么的 1. 什么是 JS 原型链? 我们知道 JS 有对象,比如 var ob ...

  9. tensorflow中一种融合多个模型的方法

    1.使用场景 假设我们有训练好的模型A,B,C,我们希望使用A,B,C中的部分或者全部变量,合成为一个模型D,用于初始化或其他目的,就需要融合多个模型的方法 2.如何实现 我们可以先声明模型D,再创建 ...

  10. LinkedBlockingQueue源码分析

    1. LinkedBlockingQueue源码分析(JDK8) 2. LinkedBlockingQueue源码分析 啦啦啦