Spring Boot实践 第二章 Spring boot 的配置文件

2023-11-17

前一章 我们创建了第一个spring boot 程序,  这一章分享一下spring boot的配置方式和一些技巧.

spring boot 的特性之一就是 配置简单.

spring boot不再使用之前spring 的xml配置方式,  xml的配置方式太复杂,且相互引用很麻烦.  

spring boot 提供两种配置文件方式 ,一种是 *.properties方式. 另一种是*.yml方式.  下面将分别介绍一下.

1.     properties方式的配置文件:

        我们接着上一章的工程继续.  先来一个简单的, 配置一下tomcat的信息:

        首先在resources的根目录下面创建一个 application.properties 文件 .  这里的文件名 application 是默认的,如果使用其他名字的文件, 且没有进行引入,那么就找不到配置文件了.

        在这个配置文件中添加如下代码:

# 指定tomcat的字符集
server.tomcat.uri-encoding: UTF-8
#设定tomcat的最大工作线程数
server.tomcat.max-threads: 10
#设定http监听端口
server.port: 18080
#设定Tomcat的base 目录,如果没有指定则使用临时目录.
server.tomcat.basedir: target/tomcat

         这里配置了 spring boot 内嵌的tomcat的一些属性.  接下来我们启动一下程序, 发现访问端口变成18080了 .

        在实际的项目开发中, 我们的项目配置文件都需要分成 开发, 测试, 生成环境的. 如果不划分,那么部署的时候将是一件很头疼的事情. 那么在spring boot 中是怎么划分配置文件的环境呢,  我们接着往下走.

      在resources目录下新建一个application-dev.properties 文件 , 把上面的那些代码从application.properties 中复制到application-dev.properties中,并且把server.port改成28080. 最后, 在application.properties的最上面加一句话  spring.profiles.active: dev

       最终两个配置文件变成如下内容:

        application.properties

spring.profiles.active: dev
# 指定tomcat的字符集
server.tomcat.uri-encoding: UTF-8
#设定tomcat的最大工作线程数
server.tomcat.max-threads: 10
#设定http监听端口
server.port: 18080
#设定Tomcat的base 目录,如果没有指定则使用临时目录.
server.tomcat.basedir: target/tomcat

      application-dev.properties

# 指定tomcat的字符集
server.tomcat.uri-encoding: UTF-8
#设定tomcat的最大工作线程数
server.tomcat.max-threads: 10
#设定http监听端口
server.port: 28080
#设定Tomcat的base 目录,如果没有指定则使用临时目录.
server.tomcat.basedir: target/tomcat

     运行一下,发现访问端口变成28080了.    

     原理是这样的,  application.properties 我们叫它主配置文件,   application-dev.properties 我们叫它从配置文件. 一个项目中只能有一个主配置文件, 但是可以有多个从配置文件.  一般把不需要区分环境的配置信息放在主配置文件中(比如说数据驱动, JPA, 日志的配置). 把一些需要区分环境的配置文件放在从配置文件中(比如说数据库连接等).   从配置文件的命名规则是application-从配置后缀.properties , 我们可以用dev表示开发环境 application-dev.properties , 用test表示测试环境 application-test.properties, 用pro表示生产环境 application-pro.properties, 然后引入从配置即可.   引入从配置文件的方式有以下几种:

  •      在主配置文件中引入, 在主配置文件中添加  spring.profiles.active:  dev  #从配置后缀 .
  •      在IDEA 中配置Spring boot的启动项中添加具体的启动环境, 方法如下:

            打开IDEA的启动配置编辑

            

            新增一个spring boot 启动项

            

            选择启动入口, 填写配置从文件的前缀

         

          最后点击ok, 就可以了.

  •        在部署环境的启动脚本指定:

            在部署环境的启动脚本中的启动命令 java -jar  (见第一章) 添加 --spring.profiles.active=pro  例如 :java  -jar ***.jar --spring.profiles.active=pro

 2.   yml方式的配置文件:

      这种方式和.properties 很类似 , 就是把server.tomcat.uri-encoding 在 . 的地方逐级用: 分割,用缩进表示所属就行了. 具体的写法如下:

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 10
    basedir: target/tomcat
  port: 18080

    这里一定要注意每一行的缩进,不然就报错了.

    比较一下properties的写法:

server.tomcat.uri-encoding: UTF-8
server.tomcat.max-threads: 10
server.port: 18080
server.tomcat.basedir: target/tomcat

   spring boot 官方推荐yml的写法, 个人也比较喜欢yml的写法.

   yml方式也可以用主从配置文件的方式区分环境, 使用方式和properties配置一样, 这里就不多说了, 截个图:

   

   主配置这样引入从配置 :

spring:
  profiles:
    active: dev

  大家可以自己试试.

  其实spring boot 设计到的框架的配置远没有这么简单, 后面我们引入其他框架的时候会一一介绍它们的配置方法. 后面涉及到的配置文件都将采用yml的方式.

 

  在实际开发中, 除了处理框架的配置之外,我们常常会用到自定义常量的配置, 下面介绍一下常量的配置.

  其实自定义的配置是可以写到框架配置文件中的,但是这样不太友好, 还是另外建一个文件来放置这些配置吧. 我们建立一个config.properties文件,然后加入两个自定义配置

default.name=jerry
default.address=China

我们先按照文件进行分组的方式获取配置的值, 首先定义一个类 ConfigSetting.java, 代码如下:

@Configuration
@PropertySource("classpath:config.properties")
public class ConfigSetting {

    @Value("${default.name}")
    private String defaultName;

    @Value("${default.address}")
    private String defaultAddress;

    public String getDefaultName() {
        return defaultName;
    }

    public void setDefaultName(String defaultName) {
        this.defaultName = defaultName;
    }

    public String getDefaultAddress() {
        return defaultAddress;
    }

    public void setDefaultAddress(String defaultAddress) {
        this.defaultAddress = defaultAddress;
    }

}

   这样配置读取的类就完成了, 这个类通过注解@Configuration 指定这个类是一个配置类, 通过 @PropertySource("classpath:config.properties") 指定配置文件的路径, 在属性上通过 @Value 对应配置文件中的key, 这样,spring 就会自动把配置中的value绑定到属性上,我们直接通过get方法获取属性值即可.

         下面我们在DemoController中注入这个ConfigSetting 并添加两个Controller方法, 来测试一下配置的读取, 代码如下:

    @Autowired
    private ConfigSetting configSetting;

    @RequestMapping("/name")
    String getName() {
        return "name: " + configSetting.getDefaultName();
    }

    @RequestMapping("/address")
    String getAddress() {
        return "address: " + configSetting.getDefaultAddress();
    }

    启动项目, 访问 http://localhost:18080/name 和 http://localhost:18080/address 发现,配置文件的值已经被读取到了.

    在实际开发过程中, 有时候需要按照前缀分组不同的配置,那么我们可以采用另外一种办法, 还是使用上面config.properties的配置文件, 我们需要获取到所有default前缀的配置, 我们再创建一个类  DefaultSetting.java  代码如下:

@Configuration
@PropertySource("classpath:config.properties")
@ConfigurationProperties(prefix = "default")
public class DefaultSetting {

    private String name;

    private String address;

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }
}

    和上面那种配置一样,唯一的区别是通过@ConfigurationProperties指定配置前缀, 属性对应后缀即可绑定到配置的值, 大家可以自己写个Controller 注入DefaultSetting试一下获取属性值.

    spring boot的基本配置方法就介绍到这了, 后面我们用到其他的包的时候也会介绍它们的配置的写法.

 

本章结束 

下面一章里将介绍spring boot的日志配置.敬请期待.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot实践 第二章 Spring boot 的配置文件 的相关文章

随机推荐

  • 通俗理解三大范式

    关系型数据库中我们用的最多的就是第一范式 1NF 第二范式 2NF 第三范式 3NF 所以需要我们深入理解三大范式 第一范式 1NF 要求数据库的每一列都是不可分割的原子数据项 在上面的表中 家庭信息 和 学校信息 列均不满足原子性的要求
  • Windows下C语言操作硬件设备的方法

    本文作者 Fezl 本文原地址 http blog csdn net u010147522 article details 49912221 之前都是在linux下操作硬件设备 open read write ioctl 相当方便 最近要检
  • jQuery 入门教程(23): jQuery UI Autocomplete示例(一)

    AutoComplete 在获取焦点后 随着用户键入的内容 可以在预订的数据源中查找和已输入的内容相匹配的内容列表供用户选择 这可以用作之前输入过的内容也可以用作自动填充相关内容 比如根据城市名 自动填充邮编等 你可以使用本地数据源或是远程
  • nvm的安装及使用、下载cnpm以及git的配置

    nvm下载 下载图中安装包 下载完了就有这个 双击安装 路劲把C改为D即可 这是直接下载选择好安装路劲之后 没配置的环境变量 配置后的环境变量 1 文件夹设置 2 环境变量配置 查询nvm版本号 nvm常用命令如下 使用nvm下载 node
  • 适合初学者的强化学习教程(1): python使用gym实践和注意事项

    作者 知乎 Ai酱 安装步骤和报错问题 安装 pip install gym 报错 AttributeError module gym envs box2d has no attribute BipedalWalker 这是因为gym没有安
  • C语言for循环必备练习题

    话不多说 直接上题 笔者的一贯要求 速度 1 作业标题 663 关于while 条件表达式 循环体 以下叙述正确的是 假设循环体里面没有break continue return goto等等语句 作业内容 A 循环体的执行次数总是比条件表
  • 构造函数初始化列表

    目录 一 初始化列表 二 初始化列表的使用 三 注意 1 每个成员变量在初始化列表中只能出现一次 初始化只能初始化一次 2 类中包含以下成员 必须放在初始化列表位置进行初始化 3 尽量使用初始化列表初始化 因为不管你是否使用初始化列表 对于
  • ubuntu16.04上利用opencv目标跟踪工具实现8种目标跟踪

    一共八种工具 八种工具包括 BOOSTING Tracker 和Haar cascades AdaBoost 背后所用的机器学习算法相同 但是距其诞生已有十多年了 这一追踪器速度较慢 并且表现不好 但是作为元老还是有必要提及的 最低支持Op
  • 操作系统面试题总结

    1 线程与进程的区别联系 2 进程通信方式有哪些 3 同步的方式有哪些 4 ThreadLocal与其它同步机制的比较 5 进程死锁的条件 第一题 1 线程是进程的一个实体 一个进程可以拥有多个线程 多个线程也可以并发执行 一个没有线程的进
  • [Unity 3D] DOTween 常用函数

    DOTween官方文档 http dotween demigiant com documentation php 一 控制变量 1 DOTween To static DOTween To getter setter to float du
  • 端口扫描介绍

    文章目录 1 端口的基本概念 2 端口的常见分类 3 端口扫描原理 1 端口的基本概念 端口 在计算机网络领域中是个非常重要的概念 它是专门为计算机通信而设计的 它不是硬件 不同于计算机中的 插槽 可以说是个 软端口 端口是由计算机的通信协
  • vue+Element-ui 导入excel文件生成json数据

    1 首先安装依赖 import XLSX from xlsx 2 建立读取excel文件的js文件 以便调用 importExcel js import XLSX from xlsx export function readExcel fi
  • java随笔:类成员

    类成员 1 介绍 在java中只能包含成员变量 方法 构造器 初始化块 内部类 接口 枚举 5种成员 其中static可以修饰成员变量 方法 初始化块 内部类 接口 枚举 用static修饰的成员就是类成员 类成员属于整个类 而不属于单独的
  • KLT(Kanade-Lucas-Tomasi )

    目录 光流法 KLT 原理 应用 目标跟踪算法主要分为两类 一类是传统的目标跟踪算法 粒子滤波 pf Mean Shift及KLT算法 或称Lucas光流法 另一大类是基于深度学习的跟踪算法 光流法 光流 Optical flow 其实是指
  • MySQL事务隔离级别、脏读、幻读、不可重复读现象及解决办法、快照读和当前读

    目录 一 事务隔离级别 二 脏读 幻读 不可重复读现象及解决办法 1 脏读 2 不可重复读现象 3 幻读现象 4 使用for update避免幻读 5 使用串行读避免幻读现象 三 快照读与当前读 1 理论 2 RR 下 快照建立时机 第一次
  • Tensorflow Serving 模型部署指南

    文章目录 1 Saver端 模型的离线训练与导出 1 1 saved model 模型保存与载入 1 1 1 简单场景 模型保存 1 1 2 简单场景 模型载入 1 1 3 使用SignatureDef 模型保存 1 1 4 使用Signa
  • 一开机checkingmedia_Win7系统开机提示Checking Media Presence如何解决

    Win7系统在开机的时候 总是会弹出各种各样的错误提示 比如最近就有win732位系统用户反映说开机的时候提示Checking MediaPresence 出现这样的问题可能是启动顺序问题导致的 现在给大家分享一下Win7系统开机提示Che
  • actuator--基础--01--介绍

    actuator 基础 01 介绍 1 介绍 是一个采集应用内部信息暴露给外部的模块 2 提供哪些的功能 健康检查 审计 指标收集 HTTP 跟踪 监控和管理Spring Boot 应用 2 1 访问方式 上述的功能可以通过HTTP 和 J
  • ‘sslSocketFactory(javax.net.ssl.SSLSocketFactory)‘ is deprecated

    sslSocketFactory javax net ssl SSLSocketFactory is deprecated 具体信息如下 public OkHttpClient Builder sslSocketFactory SSLSoc
  • Spring Boot实践 第二章 Spring boot 的配置文件

    前一章 我们创建了第一个spring boot 程序 这一章分享一下spring boot的配置方式和一些技巧 spring boot 的特性之一就是 配置简单 spring boot不再使用之前spring 的xml配置方式 xml的配置