当前位置: 首页 > news >正文

SpringBoot 实战 (三) | 配置文件详解

微信公众号:一个优秀的废人
如有问题或建议,请后台留言,我会尽力解决你的问题。

前言

如题,今天解析下 SpringBoot 的配置文件。

自定义属性加载

首先构建 SpringBoot 项目,不会的看这篇旧文 使用 IDEA 构建 Spring Boot 工程。

首先在项目根目录下加入以下自定义属性:

# 防止读取乱码
spring.http.encoding.charset=UTF-8
# 项目启动端口
server.port=9999
# 自定义配置
com.nasus.author.name=一个优秀的废人
com.nasus.article.title=SpringBoot配置文件详解

使用 @value 注解读取配置文件属性:

package com.nasus.bean;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * Project Name:springboot_properties_demo <br/>
 * Package Name:com.nasus.properties <br/>
 * Date:2019/1/28 20:59 <br/>
 * <b>Description:</b> TODO: 描述该类的作用 <br/>
 * @author <a href="turodog@foxmail.com">nasus</a><br/>
 */

@Data
@Component
public class PropertiesBean {

    @Value("${com.nasus.author.name}")
    private String name;

    @Value("${com.nasus.article.title}")
    private String title;

    @Value("${com.nasus.doing}")
    private String desc;

}

之后新建 controller 测试自定义属性加载,代码如下:

package com.nasus.controller;

import com.nasus.bean.PropertiesBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Project Name:springboot_properties_demo <br/>
 * Package Name:com.nasus.controller <br/>
 * Date:2019/1/28 21:41 <br/>
 * <b>Description:</b> TODO:  测试自定义属性加载<br/>
 *
 * @author <a href="turodog@foxmail.com">nasus</a><br/>
 */
@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    private PropertiesBean propertiesBean;

    @GetMapping("/getInfo")
    public PropertiesBean getInfo(){
        return propertiesBean;
    }
}

访问 http://localhost:8080/test/getInfo 查看加载结果:

测试结果

可以看到,加入 @value 注解之后,配置文件的属性都被读取出来了。以前,或许我们还需要专门写一个读取配置文件的工具类才能把属性读取出来,现在有了 Spring ,我们可以直接使用 @value 就能读取了,简直不能太方便。本例源码在这:github 地址

参数间的引用

配置文件代码如下:

# 防止读取乱码
spring.http.encoding.charset=UTF-8
# 项目启动端口
server.port=9999
# 自定义配置
com.nasus.author.name=一个优秀的废人
com.nasus.article.title=SpringBoot配置文件详解

com.nasus.doing=${com.nasus.author.name}写文章《${com.nasus.article.title}》

可以看到最后一个参数配置使用了前两个的参数配置,测试结果如下:
测试结果

使用随机数

有时项目需求,可能我们需要配置一些随机数,比如说为了安全而随机配置的服务器端口,以及登录密钥。这时我们就可以用 SpringBoot 的 random 属性来配置随机数,比如:

# 随机字符串
com.nasus.article.value=${random.value}
# 随机int
com.nasus.article.number=${random.int}
# 随机long
com.nasus.article.bignumber=${random.long}
# 10以内的随机数
com.nasus.article.test1=${random.int(10)}
# 10-20的随机数
com.nasus.article.test2=${random.int[10,20]}

使用多配置文件

很多时候我们开发项目都需要很多套环境,比如有测试环境,开发环境以及生产环境。不同的环境就需要使用不同的配置文件,为此我们可以根据这 3 个环境分别新建 以下 3 个配置文件。

application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境

项目中默认的配置文件是 application.properties 。这时我们可以根据自己的环境去使用相应的配置文件,比如说,项目各个环境的端口必须不一样。那我们可以这样配置:
application-dev.properties:开发环境

server.port=6666

application-test.properties:测试环境

server.port=7777

application-prod.properties:生产环境

server.port=8888

假如,现在我打包上线,那就必须用生产环境的配置文件了,这时我们可以在 默认的配置文件 application.properties 中加入以下配置即可

spring.profiles.active=prod

配置数据库

SpringBoot 的配置文件有两种格式,一种是 .properties 格式(以上栗子都是用的这种)还有一种用的是 .yaml 格式。以下是用 yaml 方式配置。这两种格式并无好坏之分,纯看个人使用习惯。我就比较喜欢 yaml 格式,因为看起来比较简洁。

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=true
    username: 你的数据库名称
    password: 你的数据库密码

  jpa:
    hibernate:
      ddl-auto: update   #ddl-auto:设为update 表示每次都重新建表
    show-sql: true

注意事项

  1. 使用 yaml 格式需要注意一点就是 键值对冒号后面,必须空一格
  2. application.properties 配置中文值的时候,读取出来的属性值会出现乱码问题。但是 application.yml 不会出现乱码问题。原因是,Spring Boot 是以 iso-8859 的编码方式读取 application.properties 配置文件。

解决第二点,只需加入 spring.http.encoding.charset=UTF-8 配置即可。

后语

以上就是我对 SpringBoot 配置文件的理解与使用,当然以上只是介绍了一下 SpringBoot 配置文件的几个用法,它的用法还有非常多,想要深入使用还是需要各位多多深入实践。最后,对 Python 、Java 感兴趣请长按二维码关注一波,我会努力带给你们价值,如果觉得本文对你哪怕有一丁点帮助,请帮忙点好看,让更多人知道。

另外,关注之后在发送 1024 可领取免费学习资料。资料内容详情请看这篇旧文:Python、C++、Java、Linux、Go、前端、算法资料分享

一个优秀的废人

相关文章:

  • 搜索分词---产生新词的公式
  • ORA-22813 ORA-06512
  • MySQL 服务启动y异常: 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决...
  • Swift—UITextField的基本用法
  • xkb 第3章 虚拟 Modifiers
  • javascript 隐性类型转换步骤
  • 悲伤的结局!救援人员发现西班牙坠井男孩遗体
  • Python3-进程
  • eclipse中查看某个方法(函数)被谁调用
  • 原创【歌词类】绘流年
  • Ubuntu安装Oracle SQLDeveloper
  • nginx跨域问题记录
  • CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告
  • SQL学习——基本语法
  • SQL学习——数据类型
  • 【React系列】如何构建React应用程序
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • AWS实战 - 利用IAM对S3做访问控制
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • jquery cookie
  • laravel5.5 视图共享数据
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Otto开发初探——微服务依赖管理新利器
  • spark本地环境的搭建到运行第一个spark程序
  • storm drpc实例
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Vue全家桶实现一个Web App
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 复杂数据处理
  • 聚类分析——Kmeans
  • 我这样减少了26.5M Java内存!
  • Java性能优化之JVM GC(垃圾回收机制)
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 组复制官方翻译九、Group Replication Technical Details
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #{} 和 ${}区别
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (5)STL算法之复制
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (译)计算距离、方位和更多经纬度之间的点
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Linux整合apache和tomcat构建Web服务器
  • .NET Core 项目指定SDK版本
  • .NET中使用Redis (二)