springboot参数配置

2023-11-18

全局配置文件

  1. application.properties 配置文件

先准备两个pojo实体类Pet和Person

@Component//用于将Person类作为Bean注入到spring容器中
@ConfigurationProperties(prefix = "person") //将配置文件中以person开头的属性注入到该类中
public class Person {


    private int id;            //id
    private String name;      //名称
    private List hobby;       //爱好
    private String[] family; //家庭成员
    private Map map;
    private Pet pet;          //宠物
    //getter  setter  toString方法省略

@ConfigurationProperties(prefix = “person”)注解的作用就是将配置文件中的以person开头的属性值通过setXX()方法注入到实体类对应的属性中。
@Component注解的作用是将当前注入属性值的Person类对象作为Bean组件放入到Spring容器中,只有这样才能被@ConfigurationProperties注解进行赋值。

在resource目录下的application.properties配置文件,在该配置文件中编写需要对Person类设置的属性,如下

person.id=1
person.name=tom
person.hobby=吃饭,睡觉,打豆豆
person.family=father,mother
person.map.k1=v1
person.map.k2=v2
person.pet.type=dog
person.pet.name=旺财

编写application.properties配置文件时,由于要配置Person对象属性是我们自定义的,Spring Boot无法自动识别,所以不会有任何书写提示。在实际开发中,为了出现代码提示的效果来方便配置,在使用@ConfigurationProperties注解进行配置文件属性值注入时,可在pom.xml中添加一个Spring Boot提供的配置处理器依赖

		 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

在pom.xml中添加上述配置依赖后,还需要重新运行项目启动类或者使用“Ctrl+F9”快捷键(即Build Project)重构当前Spring Boot项目方可生效

在这里插入图片描述

打印结果
Person{id=1, name=‘tom’, hobby=[吃饭, 睡觉, 打豆豆], family=[father, mother], map={k1=v1, k2=v2}, pet=Pet{type=‘dog’, name=‘旺财’}}
可以看出,测试方法configurationTest()运行成功,同时正确打印出了Person实体类对象,至此,说明application.properties配置文件属性配置正确,并通过相关注解自动完成了属性注入。

  1. application.yaml 配置文件
  1. value值为普通数据类型
person:
  id: 2
  name: lucy
  1. value值为数组和单列集合,主要有两种书写格式:缩进式、行内式
#缩进式,如下两种都可以

person:
  hobby: 
    - 吃饭
    - 睡觉
    - 打豆豆
        
person:
  hobby:
    吃饭,
    睡觉,
    打豆豆

#行内式
person:
  hobby: [吃饭,睡觉,打豆豆]
  1. value值为map集合和对象
#缩进式
person:
  map:
    k1: v1
    k2: v2
    
#行内式
person:
  map: {k1: v1,k2: v2}

需要注意的一点是application.properties会覆盖application.yaml同样的配置

配置文件属性值的注入

  1. 使用@ConfigurationProperties注入属性
//用于将Person类作为Bean注入到spring容器中
@Component
//将配置文件中以person开头的属性注入到该类中
@ConfigurationProperties(prefix = "person")
public class Person {

    private int id;

    public void setId(int id) {
        this.id = id;
    }
}

@ConfigurationProperties(prefix = “person”) 表示配置文件中的属性以person开头

  1. 使用@Value注入属性
@Component
public class Person {

    @Value("${person.id}")
    private int id;
    
    @Value("${person.name}")
     private String name; 
     
	@Value("北京")
    private String address;
}

@Value不仅可以将配置文件中的属性注入person的id属性,还可以直接赋值,@ConfigurationProperties不支持。另外使用@Value注解方式需要对每一个属性注入设置,但是不需要写属性setXX()的方法。

自定义配置

  1. 使用 @PropertySource加载配置文件

加载自定义配置文件的需求,可以通过使用@PropertySource注解结合@Configuration注解配置类的方式实现。@PropertySource注解用于指定自定义配置文件的位置和名称。同时,为了保证springboot能够扫描到,还需要在类上添加@Configuration注解来表明这是一个配置类。

  1. 在项目路径下新建test.properties配置文件,在配置文件中编写需要设置的属性
test.id=1
test.name=test
  1. 自定义配置类
@Configuration
@PropertySource("classpath:test.properties")  //配置自定义配置文件的名称及位置
@EnableConfigurationProperties(MyProperties.class) // 
@ConfigurationProperties(prefix = "test")
public class MyProperties {

	private int id;
    private String name;
	//省略getXX()和setXX()方法
}
  • @Configuration注解表示当前类是一个自定义配置类,这里也可以使用传统的@Component注解
  • @PropertySource(“classpath:test.properties”) 注解指定了自定义配置文件的位置和名称
  • @ConfigurationProperties(prefix = “test”)注解将上述自定义配置文件test.properties中以person开头的属性值注入到该配置类属性中
  • 如果配置类上使用的是@Component注解而非@Configuration注解,@EnableConfigurationProperties注解可以省略
  1. 测试
//测试启动器,并加载spring boot测试注解
@RunWith(SpringRunner.class)
//标记该类为spring boot单元测试类,并加载项目的applicationContext上下文环境
@SpringBootTest
class Springboot01DemoApplicationTests {

    /*
      @propertySource进行测试
     */
    @Autowired
    private MyProperties myProperties;

    @Test
    void myPropertiesTest() {
        System.out.println(myProperties);
    }
}

测试结果:MyProperties{id=1, name=‘test’}

  1. 使用@Configuration编写自定义配置类
  1. 在springboot框架中,推荐使用配置类的方式向容器中添加和配置组件,通常使用@Configuration注解定义一个配置类,springboot会自动扫描和识别配置类,从而替换传统spring框架中的XML配置文件
  2. 当定义一个配置类后,还需要在类的方法上添加@Bean注解进行组件配置,将方法的返回值对象注入到spring容器中,并且组件名称默认使用的方法名,也可以使用@Bean的name或者value属性自定义组件名称。
  3. 自定义一个bean类
public class MyService {
}
  1. 自定义一个配置类
//标明该类为配置类
@Configuration 
public class MyConfig {

    //将返回值对象作为组件添加到spring容器中,标识id默认是方法名
    @Bean(name = "iservice")   
    public MyService myService() {

        return new MyService();
    }
}
  1. 测试
//测试启动器,并加载spring boot测试注解
@RunWith(SpringRunner.class)
//标记该类为spring boot单元测试类,并加载项目的applicationContext上下文环境
@SpringBootTest
class Springboot01DemoApplicationTests {

    @Autowired
    private ApplicationContext context;

    @Test
    void iocTest() {
        System.out.println(context.containsBean("iservice"));
    }
}

测试结果返回true,表示容器中包含id 为iservice的实例对象组件,说明使用自定义配置类成功向spring容器添加和配置了组件

随机参数设置和参数间引用

  1. 随机参数配置

在springboot配置文件中,随机值设置使用springboo内嵌的RandomValuePropertySource类,对一些隐秘属性值或者测试用例属性值进行随机值注入,具体用法如下

#随机值
my.secret=${random.value}
#随机整数
my.number=${random.int}
#随机长整形
my.bignumber=${random.long}
#随机UUID
my.uuid=${random.uuid}
#小于10的随机整数
my.number.less.than.ten=${random.int(10)}
#范围在[1024,65536]之间的随机整数
my.number.in.range=${random.int[1024,65536]}
  1. 参数间引用
  1. 在springboot配置文件中,配置文件的属性值还可以进行参数间的引用,也就是在后一个配置的属性值中直接引用先前已经定义过的属性,这样可以直接其中的属性值。
  2. 优点:在多个具有互相关联的配置属性中,只需要修改一处属性预先配置,其他地方都可以引用,省去了后续多出修改的麻烦。参数间引用的语法格式为${xx},xx表示先前在配置文件已经配置过的属性名,具体用法如下
#随机值设置及参数间引用
tom.age=${random.int[10,20]}
tom.description=tom的年龄可能是${tom.age}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot参数配置 的相关文章

随机推荐

  • 桥接模式下的虚拟机中ping不通网关

    桥接的虚拟机ping不通网关 配置VM 工具栏中的 编辑 gt 虚拟网络编辑器 点击添加网络 再选择桥接模式 2 打开虚拟机设置 网络适配器选择桥接模式 4 进入虚拟机 进入网络配置 5 将宿机的IP 掩码 网关等信息配置 注意 此时选择
  • angular新建组件的组成部分

    主要分为三个组成部分 一 一个ts文件 用来处理数据和功能的 初始会有一个inport 和一个 component 二 一个html文件 用来书写页面的内容 初始会有一个标签 三 一个css文件 用来书写页面样式 初始是一个空文件夹 转载于
  • redis 主从哨兵模式搭建

    一 REDIS主从模式 搭建三个节点 同一个机器 三个端口 安装包 wget http download redis io releases redis 5 0 7 tar gz 安装步骤 https blog csdn net whg18
  • 【Linux】Linux和Window下\r与\n的区别、git命令行的使用

    作者 小卢 专栏 Linux Git 喜欢的话 世间因为少年的挺身而出 而更加瑰丽 人民日报 目录 1 回车换行符在Window下和在Linux下的区别 1 1回车换行符 1 2 行缓冲区打印 1 3进度条小程序 2 git命令行的使用 2
  • JAVA SM2 数字证书生成

    文章目录 Before Start Build with Maven QuickStart 生成自签名公私钥对 证书签名算法算法提供者 设置证书信息 标识信息构造 DN 获取扩展密钥用途构造 可选 证书信息构造 X 509格式证书对象生成
  • C语言版通讯录——动态存储(进阶版)

    前言 之前 我出了一期关于通讯录管理系统的项目实现 里面可以实现通讯录人员的增添改查显示以及排序统计功能 但那种只是以静态开辟内存的方式进行编写 大小固定死 若是达到上限便不可以再进行添加 这次优化 我会将静态存储改为动态存储 达到可以永久
  • idea双击启动无效,idea卡顿问题

    idea双击启动无效 大概率是关机时没有正确关闭idea 再次开机导致无法正常启动idea 1 通过任务管理器杀死idea进程后重启idea 2 需要修改配置 打开 以各自电脑实际为准 C Program Files JetBrains I
  • OpenResty简介、编译安装、新增 sticky模块(再编译)、升级

    OpenResty 也被称为 ngx openresty 是一个基于 Nginx 与 Lua 的高性能 Web 平台 其内部集成了大量精良的 Lua 库 第三方的Nginx模块和大部分系统依赖包 用于方便地搭建能够处理超高并发 扩展性极高的
  • 找不到boost/noncopyable.hpp问题

    本人在vs2013使用boost库的时候 提示找不到boost noncopyable hpp文件 在百度和贴吧上找了很多资料 安装没出问题 只是在包含include的路径是为D boost 1 56 0 boost 本人将boost库直接
  • c++ 友元

    c 类中可以用friend关键字来声明友元 友元可以是另一个类或者类外的其他函数 友元只具有单向性例如 在类A中将类B声明为友元B可以查看A中的所有成员 而A不能查看B的私有成员 同理将一个函数声明为友元时这个函数也可以访问类中的所有成员
  • 6、微信小程序的布局

    文章目录 前言 一 传统基本布局 1 盒子模型 2 显示方式Display 3 定位position 4 溢出属性Overflow 5 浮动Float 6 对齐 二 Flex弹性布局 1 基本属性 2 使用示例 前言 wxss 指的是 We
  • (转)42个超实用的Google Chrome 插件,值得你拥有,建议收藏!

    每日英文 When friends ignore you don t be sad everyone has his own life who can not always be with you 当朋友忽略你时 不要伤心 每个人都有自己的
  • MySql语句查询某一级节点的所有子节点

    MySql语句查询某一级节点的所有子节点 在日常项目中 我们总能用到树型结构的数据 我们用代码去进行查询是比较麻烦的 这里提供一种sql语句查询父节点和子节点的方法 说明 只能当前节点查出所有子节点 不包含与当前节点平级的节点 且子节点是全
  • 事务,不只ACID

    1 什么是事务 应用在运行时可能会发生数据库 硬件的故障 应用与数据库的网络连接断开或多个客户端端并发修改数据导致预期之外的数据覆盖问题 为了提高应用的可靠性和数据的一致性 事务应运而生 从概念上讲 事务是应用程序将多个读写操作组合成一个逻
  • 微信h5分享好友和朋友圈功能

    在开发公众号H5项目时 如果想和小程序一样有分享朋友圈和好友功能时发现会不一样 开发微信小程序时做分享有会有onShareAppMessage 这个方法 因为H5有许多限制 所以在做微信H5分享时就比较麻烦了 首先明确一点 微信H5分享是没
  • Disruptor 详解

    Disruptor 详解 想了解一个项目 最好的办法就是 把它的源码搞到本地自己捣鼓 在网上看了 N 多人对 Disruptor 速度的吹捧 M 多人对它的机制分析 就连 Disruptor 官方文档中 也 NB 哄哄自诩 At LMAX
  • Netty学习17-Netty的可视化

    学习第41节 Netty 可视化方案 Console 日志定时输出 JMX 实时展示 ELKK TIG etc ChannelHandler Sharable public class MetricsHandler extends Chan
  • 08-----查找某个文件的路径

    1 使用find命令查找 关于find这个命令 非常强大 它可以根据文件大小 属性 用户 文件名等去查找匹配的文件 这里不再解释 这里只是列出常用的方法 查找某个文件并不输出错误 find name GetInfo 2 gt dev nul
  • 【Arthas】Arthas retransform动态重新加载类

    1 概述 转载 Arthas retransform动态重新加载类 2 开篇 Arthas提供retransform命令来重新加载已加载的类 通过该命令可以在有限制的反编译已加载的类重新修改后生成class文件重新加载 在测试环境中可以尝试
  • springboot参数配置

    全局配置文件 application properties 配置文件 先准备两个pojo实体类Pet和Person Component 用于将Person类作为Bean注入到spring容器中 ConfigurationProperties