SpringBoot配置文件(二)

简介: SpringBoot配置文件

SpringBoot配置文件(一)https://developer.aliyun.com/article/1393166

Ⅱ、注意事项:value 值加单双引号——字符串🍓

字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。


string:
  value: hello
  str1: Hello \n 你好.
  str2: 'Hello \n 你好.'
  str3: "Hello \n 你好."

运行下面代码:


package com.example.springbootdemo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.PostConstruct;
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
/*@RestController*/ //复合注解 = @Controller+@ResponseBody
//导入外部资源的注解上 加入encoding配置
@PropertySource(value="classpath:/application.properties",encoding = "utf-8")
public class TestController {
    //读取配置文件 myName=张三
//    @Value("myName")错误示范
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;
    @PostConstruct//声明方法
    public void postConstruct(){
        System.out.println("string.str1:" + str1);
        System.out.println("string.str2:" + str2);
        System.out.println("string.str3:" + str3);
    }
}

image.png

可以发现在双引号时str3 \n 进行了换行

由此可以得出结论:

  • 字符串默认不用加上单引号或者双引号。
  • 单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据。
  • 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。

Ⅲ、配置对象🍓

我们还可以在 yml 中配置对象,如下配置:


student:
 id: 1
 name: Java
 age: 18

或者是使用行内写法(与上面的写法作用一致):


student: {id: 1,name: Java,age: 18}

这个时候就不能用 @Value 来读取配置中的对象了(是一整个对象,而不是对象的属性),此时要使用另一个注解 @ConfigurationProperties 来读取,具体实现如下:

新建一个Student类


package com.example.springbootdemo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "student")
@Data //lombok中的注解,提供getter和setter方法还要toString方法
public class Student {
    private int id;
    private String name;
    private int age;
}

注意:以上代码中的 getter 和 setter 方法不能省略,要么使用@Data注解,要么生成getter 和 setter 方法。因为类中的值 赋值与取值 需要getter 和 setter 方法。

调用类TestController:


package com.example.springbootdemo;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
/*@RestController*/ //复合注解 = @Controller+@ResponseBody
public class TestController {
    //读取配置文件 myName=张三
//    @Value("myName")错误示范
    @Autowired
    private Student student;
    @PostConstruct//声明方法
    public void postConstruct(){
        System.out.println(student);
    }
}

运行代码:

image.png

Ⅳ、配置集合🍓

配置文件也可以配置 list 集合:或者是使用行内写法(与上面的写法作用一致)


types:
  name:
    - mysql
    - sqlserver
    - db2

或者是使用行内写法(与上面的写法作用一致)


types: {name: [mysql,sqlserver,db2]}

集合的读取和对象一样,也是使用@ConfigurationProperties 来读取的,具体实现如下:


@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
 private List<String> name;
}

TestController 类


package com.example.springbootdemo;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
/*@RestController*/ //复合注解 = @Controller+@ResponseBody
public class TestController {
    //读取配置文件 myName=张三
//    @Value("myName")错误示范
    @Autowired
    private  ListConfig listConfig;
    @PostConstruct//声明方法
    public void postConstruct(){
        System.out.println(listConfig.getName());
    }
}

查看更多系统配置项🍓

官方文档

五、properties VS yml🍭

  • properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“: ”英文冒号加空格的方式设置,并且空格不可省略。
  • properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题。
  • yml 通用性更好,支持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使用⼀份配置文件作为 Java 和 Go 的共同配置文件。
  • yml 支持更多的数据类型。

六、设置不同环境的配置文件🍭

Ⅰ、创建不同环境的配置文件:🍓

  • application-dev.yml(开发环境)
  • application-prod.yml(生产环境)
  • 其他环境

一定是 application-开头。

Ⅱ、在 application.yml 中设置运行环境🍓

现在设置配置环境可以使用下面很方便的方法,下面active的值为dev,即为开发环境,如果是prod则为生成环境


spring:
  profiles:
    active: dev

Ⅲ、代码演示🍓

image.png

application-dev.yml


server:
  port: 9999

application-prod.yml


server:
  port: 7777

设置不同的端口号,然后运行代码:

image.png

可以发现端口号变成了application-dev.yml中设置的端口号,


spring:
  profiles:
    active: prod

dev修改成prod,端口号就变成了 7777

image.png

这就很方便修改配置环境了

相关文章
|
消息中间件 NoSQL Java
Redis监听Key的过期事件
在redis.conf配置文件中有个配置项:notify-keyspace-events " " ,默认是没有key的过期监听的,我们需要将其开启
2470 0
|
自然语言处理 JavaScript 前端开发
作用域的概念及作用?作用域的分类?.js 属于哪种作用域?
作用域的概念及作用?作用域的分类?.js 属于哪种作用域?
158 0
|
存储 负载均衡 监控
分布式定时任务,你了解多少?基于Quartz实现分布式定时任务解决方案!
定时任务系统在应用平台中的重要性不言而喻,特别是互联网电商、金融等行业更是离不开定时任务。在任务数量不多、执行频率不高时,单台服务器完全能够满足。但是随着业务逐渐增加,定时任务系统必须具备高可用和水平扩展的能力,单台服务器已经不能满足需求。因此需要把定时任务系统部署到集群中,实现分布式定时任务系统集群。
6076 1
分布式定时任务,你了解多少?基于Quartz实现分布式定时任务解决方案!
|
存储 缓存 Java
Java volatile关键字-单例模式的双重锁为什么要加volatile
Java volatile关键字--单例模式的双重锁为什么要加volatile
369 10
|
存储 消息中间件 弹性计算
统一观测丨借助 Prometheus 监控 ClickHouse 数据库
统一观测丨借助 Prometheus 监控 ClickHouse 数据库
1971 93
统一观测丨借助 Prometheus 监控 ClickHouse 数据库
|
存储 Java 数据库
Java一分钟之-JPA实体监听器:@PrePersist, @PostLoad
【6月更文挑战第15天】JPA实体监听器通过`@PrePersist`等注解在实体生命周期关键点执行逻辑,例如设置默认值或处理并发更新。常见问题包括监听器未注册、并发冲突和性能影响。示例展示了如何在`@PrePersist`中设置默认创建时间和`@PostLoad`时初始化关联数据。使用监听器能增强灵活性,但也需注意潜在问题和优化。
482 6
如何快速找出文件夹里的全部带有数字&纯数字的文件
该内容引用了一篇关于如何查找文件夹中包含中文的文件的文章,并提到用户应根据自身需求调整相关设置。
|
数据库 安全 数据库连接
EF "There is already an open DataReader associated with this Command which must be closed first."
1.出现问题 场景1:在插入数据之前,先进行判断是否存在 执行SqlDataReader.Read之后,如果还想用另一个SqlCommand执行Insert或者Update操作的话, 会得到一个错误提示:There is already an open DataReader associated with this Command which must be closed first.   2.解决方法 在ConnectionString中加上一个参数“MultipleActiveResultSets”, 将其值设置为true。
3889 0
|
存储 XML 缓存
Flowable基本使用介绍和Flowable数据库表解释
lowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据,等等。
7224 1
|
缓存 网络协议 数据挖掘
如何使用弱网环境来验证游戏中的一些延迟问题
如何使用弱网环境来验证游戏中的一些延迟问题

热门文章

最新文章