SpringBoot笔记(二):配置文件

虽然SpringBoot约定优于配置,但是在一些特殊情况下,我们依然需要自己定义一些配置,如数据库。下面我们就来研究下SpringBoot是如何配置的。

配置文件样式

SpringBoot中有两种格式的配置文件,properties和yaml。二者的优缺点如下:

  • properties文件是无序的,比较繁琐
  • yaml文件简介有序,而且在一些SpringCloud的配置中优势非常明显
  • yaml文件不支持@PropertyResource注解

配置文件位置及优先级

生成的SpringBoot项目默认在resources目录生成application.properties配置文件,但这个配置文件的位置并不是唯一,一共有4个位置可以放置配置文件,优先级如下:

  • 当前项目的根目录下的config目录下
  • 当前项目根目录下
  • 当前项目resources目录下的config目录下
  • 当前项目resources目录下
    SpringBoot笔记(二):配置文件
    配置文件的位置和默认名称可以通过IDEA的一些配置进行改变,但是笔者认为没有必要为了改变而改变,对此感兴趣的可以参考文末给出的江南一点雨的参考文章。

获取配置文件属性

自定义person类

@Component
@Data
public class Person {
    private Long id;
    private String name;
    private int age;
}

application.properties配置文件中

  person.id= 1
  person.age= 15
  person.name= zhangsan

采用Spring传统属性注入方式@Value

@Component
@Data
public class Person {
    @Value("${person.id}")
    private Long id;
    @Value("${person.name}")
    private String name;
    @Value("${person.age}")
    private int age;
}

注意: Person类要加上@Component交给Spring容器管理,否则无法注入。

application的配置文件中我们一般存放系统配置,这时我们一般采取引入person.properties文件,类似于数据库配置操作。在Spring中通常采用这种方式引入额外的配置文件


在SpringBoot中我们只要加上@PropertySource(“classpath:person.properties”)。

yaml文件:yaml文件配置格式简洁有序,但是无法使用@PropertySource引入,下面演示下yaml文件
注入数组和javaBean集合的属性配置
配置文件:

my:
  cities:
    - beijing
    - shanghai

java代码:

  @Compent
  @ConfigurationProperties(prefix = "my")
  public class My{
    private List cities;
  }

javaBean集合注入
配置文件:

  provinces:
     cities:
       - name: xuzhou
         lng: 120.23
         lat: 33.45
       - name: suzhou
         lng: 120.26
         lat: 28.45

java代码:

  @Compent
  @ConfigurationProperties(prefix = "provinces")
  public class Provinces{
      private List cities;
  }

安全获取属性

SpringBoot中引入了类型安全注入,当实体类的变量非常多时,使用类型安全注入能减少开发量,避免出错。

@Component
@Data
@PropertySource("classpath:person.properties")
@ConfigurationProperties(prefix = "person")
public class Person {
    private Long id;
    private String name;
    private int age;
}

切换开发环境

在实际的项目开发中,我们需要不同的配置环境,标准格式:application-{环境}.yml

  • 开发环境:application-dev.yml
  • 测试环境:application-test.yml
  • 生产环境:application-prod.yml
    在application.yml中开启配置:
  spring:
    profiles:
       active: dev

在application-dev.yml中:

  server:
    port: 8088

此时重启项目,项目的启动端口就从8080切换到8088了。

Original: https://www.cnblogs.com/hs5201314tx/p/15923976.html
Author: 浪淘沙V
Title: SpringBoot笔记(二):配置文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/579652/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot中配置Logback日志输出

    因为在SpringBoot中默认使用的Logback日志系统,所以SpringBoot已经集成了相关依赖,无需多余的依赖,只需在src/main/resources文件夹下,增加l…

    Java 2023年5月30日
    075
  • Java学习-089-springboot 通过 Spring Initializr 创建服务及IDEA导入后配置更新示例

    进入 Spring Initializr 初始页面,如下所示: 根据实际业务开发需要填写项目的 GAV 信息、打包方式、JDK版本等信息,点击【EXPLORE】根据想到操作下载工程…

    Java 2023年5月29日
    099
  • 戏说领域驱动设计(十七)——实体实战

    上一节中讲了实体的一些概念,作为DDD中最为复杂的组件,想用好了还需要在实践中慢慢去摸索,都是摸爬滚打过来的。本章着重演示一些实体相关的代码,通过建立一个基类和通用方法,能让您在开…

    Java 2023年6月7日
    078
  • 红黑树

    2-3-4树 JAVA技术交流群:737698533 定义 所有的叶子节点都拥有相同的深度 节点只能是2-节点,3-节点,或者4-节点 2节点 包含一个元素的节点,有两个子节点 3…

    Java 2023年6月6日
    095
  • nginx quic实验

    扫盲文档: https://http3-explained.haxx.se/zh 最终用 quiche+nginx-1.16 和 quiche+curl 完成了实验环境的搭建。 w…

    Java 2023年5月30日
    084
  • 用1000行代码统计西安新房价格后,我有一个惊人的发现……

    事情是这样的 前段时候,我站在华山之巅(没错,我去夜爬华山看日出了,要死),一个朋友突然问我: 你知道现在西安每个区域的新房均价是多少吗? 这个时候,肯定是用数据说话嘛。 不过你以…

    Java 2023年6月9日
    091
  • 数据库篇:mysql锁详解

    前言 sql事务的执行,如果需要锁定数据进行更新操作,则必定离不开锁 共享锁和排他锁 表锁 行锁 Record Lock 间隙锁 Gap Lock 行锁+间隙锁 Next-Key …

    Java 2023年6月5日
    090
  • 在springboot中使用拦截器

    在springboot中使用拦截器 拦截器Interceptor,是SpringMVC中的核心内容,利用spring的AOP(Aspect Oriented Programming…

    Java 2023年6月6日
    0101
  • OAuth2密码模式已死,最先进的Spring Cloud认证授权方案在这里

    旧的 Spring Security OAuth2停止维护已经有一段时间了, 99%的 Spring Cloud微服务项目还在使用这些旧的体系,严重青黄不接。很多同学都在寻找新的解…

    Java 2023年5月30日
    086
  • MySQL中读页缓冲区buffer pool

    Buffer pool 我们都知道我们读取页面是需要将其从磁盘中读到内存中,然后等待CPU对数据进行处理。我们直到从磁盘中读取数据到内存的过程是十分慢的,所以我们读取的页面需要将其…

    Java 2023年6月16日
    083
  • spring boot集成mybatis 出现 nvalid bound statement (not found)

    公司新搭建的项目 再idea中进行springboot集成mybatis时项目能正常启动,但在链接数据库时提示nvalid bound statement (not found) …

    Java 2023年5月30日
    088
  • Maven命令下载源码和javadocs

    1:Maven命令下载源码和javadocs 当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven命令下载这些源码,然后再进行引入,通过…

    Java 2023年5月29日
    0106
  • Dijkstra算法(三)之 Java详解

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 基本…

    Java 2023年5月29日
    080
  • <5>Linux-静态库和动态库

    1 库及库的分类 库本质:是二进制形式的目标代码(.o) 库的作用? † 库的分类:静态库和动态库(共享库)。 静态库和动态库的区别 如果程序是在编译时加载库文件的,就是使用了静态…

    Java 2023年6月15日
    069
  • 腾讯茹炳晟:你可能对研发效能的度量有误解

    作者|茹炳晟 来源|InfoQ 一、度量失败的案例 1. 历史上度量失败的案例 这张是英国街头房子的照片,这个房子非常有意思,它的窗户都被石头封掉了。这就是非常典型的由于度量指标选…

    Java 2023年5月30日
    097
  • 【Q&A】Fixing NuGet.targets(131,5) error The local source doesn’t exist

    当出现类似的nuget错误的时候 The local source ‘C:\Program Files (x86)\Microsoft Visual Studio\Shared\N…

    Java 2023年6月8日
    075
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球