SpringBoot配置文件

目录

properties配置文件

基本语法

读取配置文件

properties缺点分析

yml配置文件

yml基本语法

读取配置文件

配置对象

配置list集合

配置map


配置文件最重要的目的"解决硬编码问题(代码写死),把可能会发⽣改变的信息,放在⼀个集中的地⽅

SpringBoot配置文件有三种格式

①properties ②yaml ③yml(yaml的缩写)

事实上,SpringBoot只支持3个文件

①application.properties ②application.yaml ③application.yml(通常使用这个)

应用程序启动时,SpringBoot会自动从classpath路径找到并加载

也可以通过sspring.config.name指定文件路径和名称

  • 理论上,properties 和.yml 可以并存在于⼀个项⽬中,当.properties 和.yml 并存时,两个配置都会加载.如果配置⽂件内容有冲突,则以.properties 为主,也就是 .properties 优先级更⾼
  • 虽然理论上来讲.properties 可以和.yml 共存,但实际的业务当中,我们通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护(降低故障率).

很多项⽬或者框架的配置信息也放在配置⽂件中,⽐如:

  • 项⽬的启动端⼝(SpringBoot内置了Tomcat服务器,默认端⼝号是8080,但SpringBoot需要⽀持让⽤⼾⾃定义端⼝号)
  • 数据库的连接信息(包含⽤⼾名和密码的设置)
  • 第三⽅系统的调⽤密钥等信息
  • ⽤于发现和定位问题的普通⽇志和异常⽇志等.

SpringBoot创建项目时,就已经自动帮我们创建了配置文件

下面我们在配置文件中修改端口号

XML 复制代码
server.port=9090

启动程序,观察日志,显示Tomcat启动端口号为9090

properties配置文件

properties配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件

基本语法

以键值对形式配置,key和value之间以"="连接

XML 复制代码
# 配置项⽬端⼝号 
server.port=8080

(配置文件中以"#"来添加注释信息)

读取配置文件

使用@Value注解在项目中主动读取配置文件中的内容

properties配置

XML 复制代码
mykey.key1 = bite
java 复制代码
@RestController
public class PropertiesController {
 @Value("${mykey.key1}")
 private String key1;
 @RequestMapping("/key")
 public String key(){
 return "读取到值:"+key1;
 }
}
properties缺点分析

文件中会有很多冗余信息

为了解决这个问题,可以使用

yml配置文件

yml是yaml的缩写 "Yet Another Markup Language"中文"另一种标记语言"

yml基本语法

key: value(key和value之间使用英文冒号加空格)

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
    username: root
    password: root
读取配置文件
java 复制代码
string:
  str1: hello \n Spring Boot
  str2: 'hello \n Spring Boot'
  str3: "hello \n Spring Boot"
java 复制代码
@RestController
public class ReadYml {
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;
    @RequestMapping("/readyml")
    public String readYml(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        return "yml";

    }
}

控制台输出:

可以看出,

  • 字符串默认不用加上单引号或双引号
  • 单引号会转义特殊字符,使其失去特殊功能,始终是一个普通字符串
  • 双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义
配置对象
java 复制代码
student:
 id: 1
 name: Java
 age: 18

java 复制代码
student: {id: 1,name: Java,age: 18}

使用@ConfigurationProperties读取配置中的对象

java 复制代码
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
 private int id;
 private String name;
 private int age;
}
java 复制代码
@RestController
public class StudentController {
 @Autowired
 private Student student;
 @RequestMapping("/readStudent")
 public String readStudent(){
 return student.toString();
 }
}
配置list集合
java 复制代码
dbtypes:
 name:
 - mysql
 - sqlserver
 - db2

使⽤@ConfigurationProperties 来读取

java 复制代码
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
 private List<String> name;
}
java 复制代码
@RestController
public class ReadYml2 {
 @Autowired
 private ListConfig listConfig;
 @RequestMapping("/readList")
 public String readList(){
 return listConfig.toString();
 }
}
配置map
java 复制代码
maptypes:
 map:
  k1: kk1
  k2: kk2
  k3: kk3

或者是使⽤⾏内写法

java 复制代码
maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}

使⽤@ConfigurationProperties 来读取

java 复制代码
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
 private HashMap<String,String> map;
}
java 复制代码
@RestController
public class ReadYml2 {
 @Autowired
 private MapConfig mapConfig;
 @RequestMapping("/readMap")
 public String readStudent(){
 return mapConfig.toString();
 }
}
相关推荐
等一场春雨8 分钟前
Java设计模式 八 适配器模式 (Adapter Pattern)
java·设计模式·适配器模式
一弓虽30 分钟前
java基础学习——jdbc基础知识详细介绍
java·学习·jdbc·连接池
王磊鑫30 分钟前
Java入门笔记(1)
java·开发语言·笔记
马剑威(威哥爱编程)1 小时前
2025春招 SpringCloud 面试题汇总
后端·spring·spring cloud
硬件人某某某1 小时前
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
java·开发语言·社区团购小程序·团购小程序·java社区团购小程序
程序员徐师兄1 小时前
Java 基于 SpringBoot 的校园外卖点餐平台微信小程序(附源码,部署,文档)
java·spring boot·微信小程序·校园外卖点餐·外卖点餐小程序·校园外卖点餐小程序
chengpei1471 小时前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json
Quantum&Coder1 小时前
Objective-C语言的计算机基础
开发语言·后端·golang
五味香1 小时前
Java学习,List 元素替换
android·java·开发语言·python·学习·golang·kotlin
Joeysoda1 小时前
Java数据结构 (从0构建链表(LinkedList))
java·linux·开发语言·数据结构·windows·链表·1024程序员节