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();
 }
}
相关推荐
海里真的有鱼几秒前
Spring Boot 中整合 Kafka
后端
idealzouhu6 分钟前
Java 并发编程 —— AQS 抽象队列同步器
java·开发语言
布瑞泽的童话6 分钟前
无需切换平台?TuneFree如何搜罗所有你爱的音乐
前端·vue.js·后端·开源
听封10 分钟前
Thymeleaf 的创建
java·spring boot·spring·maven
写bug写bug16 分钟前
6 种服务限流的实现方式
java·后端·微服务
离开地球表面_9926 分钟前
索引失效?查询结果不正确?原来都是隐式转换惹的祸
数据库·后端·mysql
楠枬27 分钟前
双指针算法
java·算法·leetcode
奔驰的小野码32 分钟前
java通过org.eclipse.milo实现OPCUA客户端进行连接和订阅
java·开发语言
huapiaoy35 分钟前
Spring mvc
java·spring·mvc