当前位置:   article > 正文

Spring Boot -- 两种应用配置文件的编写方式 & 两种读取自定义配置方式_spring配置文件接收自定义key和value

spring配置文件接收自定义key和value

常用配置

在这里插入图片描述

application.properties

server.port 启动端口,默认8080

server.servlet.context-path 应用上下文,相当于为当前的应用接口加了一个统一的前缀。当有多个应用且都有同一个 /firstrequest 接口时,就是通过应用上下文进行区分的

logging.file.name=d:/logs/myspringboot.log 应用输出日志的目录,配置后日志不仅在控制台输出,还会输出到指定的日志文件

logging.level.root=error 只会输出 error 及以上的级别的日志。日志的文件有五种,分别是debug,info,warning,error,fatal

debug=true 会将 debug 级别的日志输出

数据库连接的初始化

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.name=root
spring.datasource.password=mysql
  • 1
  • 2
  • 3
  • 4

application.yml

yaml 是一种简洁的非标记语言,yaml 以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读

yaml 语法:
1、标准格式:key:(空格)value
2、使用空格表示层级关系,以:结尾

logging:
 level:
  root: info
 file:
  name: d:/logs/yumlog.log
  • 1
  • 2
  • 3
  • 4
  • 5

properties 文件与 yaml 文件的转换

https://toyaml.com/index.html

如将上述 数据库连接 的 properties 文件转换成 yaml 文件

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    name: root
    password: mysql
    url: jdbc:mysql://localhost:3306/test
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

自定义配置项 - 方式1

Spring Boot 允许我们自定义应用配置项,在程序运行时允许动态加载,这为程序提供了良好的可维护性。最好不要写中文

mall:
 config:
  name: mail
  hot-sales: 20
  show-advert: true
  • 1
  • 2
  • 3
  • 4
  • 5

注意,Java 文件中的属性必须和 application.yml 中的属性名完全相同

如果配置正常,按住 ctrl ,点击 MyController 中的 mall.config.name,可以直接跳转到配置文件中。properties 方式的配置文件可以跳转,yaml 方式的配置文件无法跳转

@RestController
public class MyController {
    @Value("${mall.config.name}")
    private String name;
    @Value("${mall.config.hot-sales}")
    private Integer hotSales;
    @Value("${mall.config.show-advert}")
    private Boolean showAdvert;

    @GetMapping({"/info"})
    public String info(){
        return String.format("name:%s,hot-sales:%s,show-advert:%s",
                name,hotSales,showAdvert);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

遇到了一个报错:

nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder
  • 1

检查缩进都是没有任何问题的,可以判断是我们配置的 application.yml 文件没有生效,经过检查发现是我们的文件名写错了,写成了 aplication.yml

自定义配置项 - 方式2

对象的方式,更推荐

school.grade=100
school.classnum=3
  • 1
  • 2
@Component
@ConfigurationProperties(prefix = "school")
public class SchoolConfig {

	// 会自动找以school为前缀的,school.grade配置
    Integer grade;

    String classnum;

	// 必须加 get ,set 方法
    public Integer getGrade() {
        return grade;
    }

    public void setGrade(Integer grade) {
        this.grade = grade;
    }

    public String getClassnum() {
        return classnum;
    }

    public void setClassnum(String classnum) {
        this.classnum = classnum;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
@RestController
public class ConfigController {

    @Autowired
    SchoolConfig schoolConfig;


    @GetMapping("/gradefromconfig")
    public String gradeclass(){
        return "年级:" + schoolConfig.grade + ",年级:" + schoolConfig.classnum ;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

切换多个配置文件

Spring Boot 可以针对不同的环境提供不同的 Profile 文件,Profile 文件的默认命名格式为 application-{env}.yml

使用 spring.profiles.active 选项来指定不同的 profile

application.yml

spring:
 profiles:
  active: prd
  • 1
  • 2
  • 3

application-dev.yml

debug: true
logging:
 level:
  root: info
 file:
  name: e:/myspringboot.log

mall:
 config:
  name: maildev
  hot-sales: 20
  show-advert: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

application-prd.yml

logging:
  level:
    root: info
  file:
    name: e:/myspringboot.log

mall:
  config:
    name: mailprd
    hot-sales: 20
    show-advert: true
server:
  port: 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

注1:使用 application.properties 文件同理

application.properties

spring.profiles.active=prd
  • 1

对应的配置文件分为 application-dev.properties 和 application-prd.properties

注2:yaml 和 properties 只是展示形式不同,本质上是一样的,举一个例子:

通用配置文件为:application.yml

spring:
  profiles:
    active: dev
  • 1
  • 2
  • 3

其下的两个配置文件可以是 application-dev.properties 和 application-prd.yml,无需文件类型必须一致

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/239499
推荐阅读
相关标签
  

闽ICP备14008679号