是想建个网站 用本地做服务器,网站集约化建设情况的汇报,网站后台设置网站地图,营销型网站的作用是目录
问题引进
宽松绑定 Value#xff08;补充#xff09; 问题引进
在进行属性绑定时#xff0c;可能会遇到如下情况#xff0c;为了进行标准命名#xff0c;开发者会将属性名严格按照驼峰命名法书写#xff0c;在yml配置文件中将datasource修改为dataSourceValue补充 问题引进
在进行属性绑定时可能会遇到如下情况为了进行标准命名开发者会将属性名严格按照驼峰命名法书写在yml配置文件中将datasource修改为dataSource如下
dataSource:driverClassName: com.mysql.jdbc.Driver
此时程序可以正常运行然后又将代码中的前缀datasource修改为dataSource如下
Bean
ConfigurationProperties(prefix dataSource)
public DruidDataSource datasource(){DruidDataSource ds new DruidDataSource();return ds;
}
此时就发生了编译错误而且并不是idea工具导致的运行后依然会出现问题配置属性名dataSource是无效的
Configuration property name dataSource is not valid:Invalid characters: SBean: datasourceReason: Canonical names should be kebab-case (- separated), lowercase alpha-numeric characters and must start with a letterAction:
Modify dataSource so that it conforms to the canonical names requirements. 规范的名称应该是烤肉串(kebab)模式(case)即使用-分隔使用小写字母数字作为标准字符且必须以字母开头。 宽松绑定
springboot进行编程时人性化设计的一种体现即配置文件中的命名格式与变量名的命名格式可以进行格式上的最大化兼容。兼容到什么程度呢几乎主流的命名格式都支持例如
Component
Data
ConfigurationProperties(prefix servers)
public class ServerConfig {private String ipAddress;
} 可以与下面的配置属性名规则全兼容
servers:ipAddress: 192.168.0.3 # 驼峰模式ip_address: 192.168.0.3 # 下划线模式ip-address: 192.168.0.3 # 烤肉串模式IP_ADDRESS: 192.168.0.3 # 常量模式 以上4种模式最终都可以匹配到ipAddress这个属性名。 原因就是在进行匹配时配置中的名称要去掉中划线和下划线后忽略大小写的情况下去与java代码中的属性名进行忽略大小写的等值匹配以上4种命名去掉下划线中划线忽略大小写后都是一个词ipaddressjava代码中的属性名忽略大小写后也是ipaddress这样就可以进行等值匹配了这就是为什么这4种格式都能匹配成功的原因。不过springboot官方推荐使用烤肉串模式也就是中划线模式。
以上规则仅针对springboot中ConfigurationProperties注解进行属性绑定时有效对Value注解进行属性映射无效。 ConfigurationProperties绑定属性时支持属性名宽松绑定这个宽松体现在属性名的命名规则上 Value注解不支持松散绑定规则 绑定前缀名推荐采用烤肉串命名规则即使用中划线做分隔符
PropertyNote my.main-project.person.first-name Kebab 风格短横线隔开建议在 .properties 和 YAML 文件中使用。 my.main-project.person.firstName 标准的驼峰语法。 my.main-project.person.first_name 下划线这是一种用于 .properties 和 YAML 文件的替代格式。 MY_MAINPROJECT_PERSON_FIRSTNAME 大写格式在使用系统环境变量时建议使用大写格式 注解的 prefix 值 必须 是kebab风格小写并以 - 分隔如 my.main-project.person 。 Value补充
在Spring框架中Value注解是用来注入外部化配置文件或者系统属性的值。通过使用这个注解我们可以注入一些简单类型的值intStringboolean等也可以注入一个复杂对象。这个注解可以标记在类的属性上表示将该属性的值与配置文件中的某个属性的值进行绑定。
Value(${example.property})
private String exampleProperty;
使用Value注解将配置文件中配置的值 进行自动注入的时候经常会出现的一个问题就是若我们忘记在配置文件中配置该参数 则会造成项目启动报错。
我们可以通过给被Value注解作用的变量进行注入的时候如果没有找到该配置参数时 设置一个默认值相当于是一个兜底的方案。
Value(${example.property:xxx})
private String exampleProperty;
被static修饰的变量通过Value会注入失败 ,如果真的需要可以选择以下形式
public static String port;Value(${spring.port:8080})
public void setPort(String port){Test.port port;
}
三种常见用法
Value(“${xxxx}”)注解从配置文件读取值的用法
常量注入
Value(xxx)
privat String name; Value(“#{}”)是获取bean属性系统属性表达式 SpEL表达式 SpEL表达式语言是一种表达式语言是一种可以与一个基于spring的应用程序中的运行时对象交互的东西。有点类似于ognl表达式。总得来说SpEL表达式是一种简化开发的表达式通过使用表达式来简化开发减少一些逻辑、配置的编写。