SpringBoot配置相关(yml文件,多环境配置...)

SpringBoot配置文件的三种格式

1.application.properties

80端口访问的时候不用写端口

2.application.yml

注意要空一格写值

3.application.yaml

写配置文件没有提示信息的解决方法

配置文件优先级 

application.properties>application.yml>application.yaml

YAML文件

什么是YAML文件?

YAML(YAML Ain't Markup Language),一种数据序列化格式。

YMAL文件扩展名

.yml(主要用这个)

.yaml

语法规则

1.大小写敏感

2.属性层级关系使用多行描述,每行结尾使用冒号结束

3.使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)。空格的个数并不重要,只要保证同层级的左侧对齐即可。

4.属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

5. # 表示注释

yml读取数据的三种方式

lesson: springboot

Person:
  id: 2
  name: 张三
  classroom: 4
  subject:
    - 语文
    - 数学
    - 英语

1.@value读取

2.用Environment读取

先装配Environment ,它会自动读取application.yml

    @Autowired
    private Environment environment;

 

3.封装对象读取 

将要读取的person封装成一个对象

@Data
@Component //交给Spring管理,后面要装配它
//@ConfigurationProperties 注解表示加载配置文件
//在该注解中也可以使用 prefix 属性指定只加载指定前缀的数据
@ConfigurationProperties(prefix = "person")
public class Person {
    private int id;
    private String name;
    private int classroom;
    private List<String> subject;
}
3个小问题:
1.需要加入这个依赖才能用@ConfigurationProperties

- 这个依赖有管理元数据的作用。

- 元数据(Metadata)是描述数据的数据,它提供了关于数据的信息,如数据的结构、格式、创建日期、作者等,而不是数据本身的内容

- 这个例子让我们更直观地理解如何从yml中读取数据,但person作为一个实例化对象,用这种方式读取显然是不合理的。

举个例子,我们可以用这种方式来配mysql,我们需要指定数据库,账号密码(这些东西其实就是元数据——描述数据的数据)等等...,然后用一个对象封装起来,在内部定义初始化等一系列必要的操作。springboot项目一启动,我们的数据源就自动配好了。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <!--可选依赖-->
            <optional>true</optional>
        </dependency>
2.在Setting中允许使用注解

3. prefix里面不能大写

为了规范,我们把配置文件中的person的p也改成小写(虽然大写也能读出来)

相应的,前面两个例子的p要改成小写

测试

自动装配

    //3.封装对象读取
    @Autowired
    private Person person;

测试代码及结果 

//3.封装对象读取
System.out.println(person.getId());
System.out.println(person.getClassroom());
System.out.println(person.getSubject());

多环境配置

yml文件

--- 分隔环境

spring:
  profiles: xxx

设置环境名称为xxx,下面写该环境具体的配置

#默认环境,在这里切换
spring:
  profiles:
    active: test

---
#开发环境

#spring:
#  profiles: dev

#不过时的写法
spring:
  config:
    activate:
      on-profile: dev

server:
  port: 80

---
#生产环境
spring:
  profiles: pro

server:
  port: 81

---
#测试环境
spring:
  profiles: test

server:
  port: 82

测试一下

测试环境的端口是82

 properties文件(了解即可)

ps:properties文件的优先级比yml文件高,测试这个的时候不用注掉yml文件

 命令行启动参数配置

我们的springboot项目打包成jar包给前端的工作人员,里面的环境已经写死了,前端要如何切换环境呢?如果我们配的环境的端口前端都有进程占用了,该如何修改呢?

--------------------------------------------------------------------------------

1.我们的配置文件里面可能会有中文,首先要在Setting中修改编码方式为utf-8

 2.先clean再package,防止前面的打的jar包影响我们此次的测试

3.找到打包好的jar包所在的文件夹

3.1 指定环境为dev环境
java -jar SpringBootProject01-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

运行结果

是dev环境的80端口,而不是我们yml文件中test环境的82端口 

3.2 指定端口为90端口
java -jar SpringBootProject01-0.0.1-SNAPSHOT.jar --server.port=90

运行结果

3.3 指定dev环境,指定dev环境下的端口为90端口
java -jar SpringBootProject01-0.0.1-SNAPSHOT.jar --server.port=90 --spring.
profiles.active=dev

注意用哪个环境要写在最后面 

运行结果

 springboot配置的优先级

自上而下,优先级从低到高。

配置文件分类

 

target目录下 

ps:

1,2级是开发级别的,3,4级是项目上线级别的。

idea里面启动项目看的是1级  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值