当前位置: 首页 > news >正文

Spring的配置属性

介绍

以前都是用XML来设置属性值,SpringBoot的自动配置可以简化Spring应用的开发。配置属性只是配置Spring应用上下文中bean的属性而已,可以通过多个源来配置,包括JVM系统属性、环境变量等。
Spring中有两种不同(但相关)的配置
bean装配:声明在Spring应用上下文中创建哪些应用组件以及它们之间如果互相注入的配置。
属性注入:设置Spring应用上下文中bean的值的配置。

使用java来配置bean

@Configuration
public class TestConfig {@Beanpublic Hello hello(){return new Hello();}
}

在上面代码中我们就通过@Configuration标注了我们的类SpringConfig是一个Spring的配置类,然后在其中定义了一个使用@Bean进行标注的方法,Spring会将其作为一个bean定义添加到bean容器中,对应beanName为“hello”,然后直接new一个对应的实例作为bean定义的实例。

在类上添加@Configuration表明是一个配置类,使用@Bean进行标注的方法对应的返回类型就是生成的bean定义对应的Class类型,对应的方法体实现就是我们用来产生对应bean定义的实例的过程,对应的方法名就是bean定义的默认beanName。

Spring的环境抽象

所谓环境抽象就是各种配置属性的一站式服务。它抽取了原始属性,这样需要这些属性的bean就会从spring本身中获取了。Spring会拉取多个数据源(JVM系统属性、环境变量、application.yml 等),并将这些属性合并到一个源中,通过这个合并的源来注入到Spring的bean中

比如在application.yml中配置系统端口

server:port:0

这里配置的0,系统会任选一个可用的端口。
还可以在这里配置很多,数据源、日志等等

创建自己的配置属性

比如分页,一页显示几条数据,这种可以复用的我们写在配置文件中更好,方便日后生产环境改变值。
Spring Boot 提供了 @ConfigurationProperties注解,把他放在Spring bean上之后就会为该bean中那些能够根据Spring环境注入的属性赋值。

在application.yml中定义 pageSize

taco:orders:pageSize: 10

在Controller中使用这个值

@Slf4j
@Controller
@RequestMapping("/orders")
@ConfigurationProperties(prefix = "taco.orders")
public class OrderController {
//这个20只是默认值,如果配置文件没有定义pageSize则会是20private int pageSize =20;//会根据配置属性中的pageSize填充值public void setPageSize(int pageSize){this.pageSize = pageSize;}@GetMappingpublic String xixiTest(){System.out.println(pageSize);return "redirect:/";}}

但是这样不能够复用,且想用这个值的时候就需要重新使用注解。
下面的方法直接将配置属性的值注入到bean中,来方便复用属性值。

//使用Component注解让Spring的组件扫描自动发现它并将其创建为Spring应用上下文中的bean
@Component
@ConfigurationProperties(prefix = "taco.orders")
@Data
public class OrderProps {private  int pageSize = 20;
}
@Slf4j
@Controller
@RequestMapping("/orders")
public class OrderController {@AutowiredOrderProps orderProps;@GetMappingpublic String xixiTest(){System.out.println(orderProps.getPageSize());return "redirect:/";}

可以使用spring profile 来切换使用不同的配置文件

http://www.lryc.cn/news/38404.html

相关文章:

  • 132.《render-props, Hoc,自定义hooks 详解》
  • 通过Session共享数据验证码进行用户登录
  • C++STL详解(六)——stack和queue
  • javaEE 初阶 — CSS 的 基本语法 与 引入方式
  • QEMU启动ARM32 Linux内核
  • than的用法合集
  • Unet 基于TCGA颅脑肿瘤MRI分割(高阶API分割模型)
  • [NIPS 2017] Improved Training of Wasserstein GANs (WGAN-GP)
  • 力扣-每天的领导和合伙人
  • 考虑分配与合并,用GO实现GCMarkSweep
  • 浙江大学海宁IMBA提面经验分享
  • Mybatis源码分析系列之第四篇:Mybatis中代理设计模型源码详解
  • JDBC的API详解
  • 【深度强化学习】(4) Actor-Critic 模型解析,附Pytorch完整代码
  • SQL注入——文件上传
  • 【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(新的开篇)”】
  • Uipath Excel 自动化系列18-RefreshPivotTable(刷新透视表)
  • 设计模式之不变模式
  • C++11 map
  • docker基本命令 - 数据卷
  • SQL查漏补缺
  • 偏向锁撤销
  • Qt版海康MV多相机的采集显示程序
  • 2023年江苏省职业院校技能大赛中职网络安全赛项试卷-教师组任务书
  • 零基础小白如何自学网络安全成为顶尖黑客?
  • 外贸建站如何提高搜索引擎排名,吸引更多潜在客户?
  • 计算机网络考研-第一章学
  • 【分布式版本控制系统Git】| Git概述、Git安装、Git常用命令
  • 【人脸识别】ssd + opencv Eigenfaces 和 LBPH算法进行人脸监测和识别
  • PMP项目管理项目成本管理