专栏首页用户5521492的专栏SpringBoot实战 | 配置文件详解

SpringBoot实战 | 配置文件详解

前言

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

自定义属性加载

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

配置文件的位置在 src >> resource 文件夹下,它的名字叫 application.properties 。在这个文件下加入以下自定义属性:

# 防止读取乱码
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 就能读取了,简直不能太方便。以下是源码地址:

https://github.com/turoDog/Demo/tree/master/springboot_properties_demo

参数间的引用

配置文件代码如下:

# 防止读取乱码
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

注意事项

使用 yaml 格式需要注意一点就是 键值对冒号后面,必须空一格

application.properties 配置中文值的时候,读取出来的属性值会出现乱码问题。但是 application.yml 不会出现乱码问题。原因是,Spring Boot 是以 iso-8859 的编码方式读取 application.properties 配置文件。 解决第二点,只需加入 spring.http.encoding.charset=UTF-8 配置即可。

本文分享自微信公众号 - 一个优秀的废人(feiren_java),作者:nasus

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 正确使用 wait/notify/notify方法以及源码解析

    前几篇复习了下《线程的创建方式》、《线程的状态》、《Thread 的源码解析》这几篇文章。这篇是第四篇,讲讲 Object 几个跟线程获取释放锁相关的方法:wa...

    一个优秀的废人
  • Docker 学习之一 | 什么是 Docker 容器?

    在容器技术没有出来之前,开发运维在进行交付的时候经常出现,开发环境执行正常,生产环境部署运行出现问题,很多原因就是因为环境导致。还有部署环境太过于复杂,交付成本...

    一个优秀的废人
  • 开发中遇到问题,如何聪明地向你的老大请教?

    这篇打算给实习生一点职场小建议。按道理说我工作两年,也算是一个职场新手。经验不太丰富,但有一点我觉得必须跟大家(尤其是实习生)分享。斗胆在各位职场老鸟面前耍耍大...

    一个优秀的废人
  • 如何在Ubuntu 18.04上将Apache Web Root移动到新位置

    在Ubuntu上,Apache Web服务器将其文档存储在/var/www/html中,该文档通常位于具有其余操作系统的根文件系统上。但有时,将文档根移动到另一...

    木纸鸢
  • day45_Webservice学习笔记_01

    Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。

    黑泽君
  • 手把手教你,嘴对嘴传达------Apache(安全优化防盗链、隐藏版本信息)

    防盗链就是防止别人的网站代码里面盗用服务器的图片,文件,视频等相关资源 如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力 作为网站的维护人员,...

    不吃小白菜
  • RSS订阅 | 购物者福利,什么值得买?

    RSS(Really Simple Syndication,简易信息聚合)是一种定制个性化推送信息的服务。它能解决你漫无目的浏览网页的问题。它不会过时,信息越是...

    谭庆波
  • 榴莲中7位数将“凤凰”域名FH.com售出

    2018年伊始,域名圈就相继报道了戴跃收购JP.com、za.cn等域名,近段时间又一重磅消息出世:榴莲将两声母域名FH.com出售了。

    躲在树上的域小名
  • 远控免杀专题文章(4)-Evasion模块免杀(VT免杀率12/71)

    1、远控免杀专题文章(1)-基础篇:https://mp.weixin.qq.com/s/3LZ_cj2gDC1bQATxqBfweg

    徐焱
  • Visual Studio 必备可视化插件推荐

    1、Visual Studio Visualizer,项目地址 https://vsdatawatchers.codeplex.com/,这个项目包括以下内容的...

    张善友

扫码关注云+社区

领取腾讯云代金券