SpringBoot万字爆肝高级配置
作者:不会压弯的小飞侠 发布时间:2022-09-17 06:34:08
@ConfigurationProperties注入
创建一个新的模板
此过程就不在这介绍了,在我SpringBoot专栏里有详细过程。
⭐⭐⭐注意的是加入所需的支持这什么也不勾选。
ServerConfig.java
package com.jkj.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "servers")
@Component
@Data
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
⭐⭐⭐注意:
@Data
为当前实体类在编译期设置对应的get/set,toString方法,hashCode方法,equals方法等。
需要导入lomok的依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
编写application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
编写ConfigurationApplication.java
@SpringBootApplication
public class ConfigurationApplication {
public static void main(String[] args) {
ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args);
ServerConfig bean = cac.getBean(ServerConfig.class);
System.out.println(bean);
}
}
运行结果:ServerConfig(ipAddress=168.225.0.15, port=123456, timeout=-1)
给第三方Bean绑定属性
方式一
🔥编写ConfigurationApplication.java
@SpringBootApplication
public class ConfigurationApplication {
@Bean
public DruidDataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
return ds;
}
public static void main(String[] args) {
ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args);
ServerConfig bean = cac.getBean(ServerConfig.class);
System.out.println(bean);
DruidDataSource ds = cac.getBean(DruidDataSource.class);
System.out.println(ds);
}
}
运行结果:com.mysql.jdbc.Driver
方式二
使用@ConfigurationProperties为第三方bean绑定属性
🔥编写application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
🔥编写ConfigurationApplication.java
@SpringBootApplication
public class ConfigurationApplication {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
return ds;
}
public static void main(String[] args) {
ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args);
ServerConfig bean = cac.getBean(ServerConfig.class);
System.out.println(bean);
DruidDataSource ds = cac.getBean(DruidDataSource.class);
System.out.println(ds.getDriverClassName());
}
}
运行结果:com.mysql.jdbc.Driver
@EnableconfigurationProperties
@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器
🔥ConfigurationApplication.java
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class ConfigurationApplication {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
return ds;
}
public static void main(String[] args) {
ConfigurableApplicationContext cac = SpringApplication.run(ConfigurationApplication.class, args);
ServerConfig bean = cac.getBean(ServerConfig.class);
System.out.println(bean);
DruidDataSource ds = cac.getBean(DruidDataSource.class);
System.out.println(ds.getDriverClassName());
}
}
🔥ServerConfig.java
package com.jkj.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "servers")
@Data
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
⭐⭐⭐注意:@EnableConfigurationProperties
与@Component
不能同时使用
解除使用@ConfigurationProperties注释警告
加入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
宽松绑定
宽松绑定就是configrationProperties注入的书写规范并不严格,大小写,下划线、中划线、springboot都可以忽略。
@ConfigurationProperties绑定属性支持属性名宽松绑定。
以ipAddress为例:
🔥驼峰模式
ipAddress: 168.225.0.15
🔥下划线模式
ip_address: 168.225.0.15
🔥中划线模式
IP_ADD_R-E-SS: 168.225.0.15
🔥常量模式
IP_ADDRESS: 168.225.0.15
🔥大写模式
IPADDRESS: 168.225.0.15
🔥烤肉串模式(推荐使用)
ip-address: 168.225.0.15
宽松绑定不支持注解@Value引用单个属性的方式
🔥测试:
package com.jkj;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot06ConfigurationApplicationTests {
@Value("${servers.ipAddress}")
private String msg;
@Test
void contextLoads() {
System.out.println(msg);
}
}
报错信息:Could not resolve placeholder 'servers.ipAddress' in value "${servers.ipAddress}"
常量计量单位绑定
SpringBoot支持JDK8提供的时间与空间计量单位
package com.jkj.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.DataSizeUnit;
import org.springframework.boot.convert.DurationUnit;
import org.springframework.util.unit.DataSize;
import org.springframework.util.unit.DataUnit;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
@ConfigurationProperties(prefix = "servers")
@Data
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
@DurationUnit(ChronoUnit.DAYS)
private Duration serverTimeOut;
@DataSizeUnit(DataUnit.TERABYTES)
private DataSize dataSize;
}
🔥常用计量单位 ChronoUnit
DataUnit
数据校验
🔥添加了SR303规范坐标与Hibernate校验框架对应坐标
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
🔥使用hibernate框架提供的校验器做实现类
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
🔥对Bean开启校验功能
@ConfigurationProperties(prefix = "servers")
@Validated
@Data
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
🔥设置校验规则
@ConfigurationProperties(prefix = "servers")
@Validated
@Data
public class ServerConfig {
private String ipAddress;
@Max(value = 9999,message = "最大值不能超过9999")
@Min(value = 1111,message = "最小值不能超过1111")
private int port;
private long timeout;
}
🔥yml文件中port设置为1234,测试结果如下
进制数据转换规则
案例模拟
🔥编写application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
password: 0123
🔥编写ConfigureApplication,java
package com.jkj;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot06ConfigurationApplicationTests {
@Value("${dataSource.Password}")
private Password psw;
@Test
void contextLoads() {
System.out.println(psw);
}
}
测试结果是个八进制的83。
⭐⭐⭐注意:根据字面值表达方式,String类型的需要使用双引号包裹。
🔥重新编写application.yml
servers:
ipAddress: 168.225.0.15
port: 1234
timeout: -1
dataSource:
driverClassName: com.mysql.jdbc.Driver
password: "0123"
运行结果:
来源:https://blog.csdn.net/qq_43514330/article/details/125810049


猜你喜欢
- 开始我用List<泛型>接受json串,如下,结果list内并非泛型对象,而是JSONObject对象。这样在遍历的时候就报了转
- 一、实现效果本篇文章实现了简单的图片轮播,初始化3张资源图片,初始化3秒更换一次图片背景,轮换播放。二、知识点Thread线程start()
- 如下所示:class B {public B() { super(); System.out.println(&qu
- 1.背景Java语言相比于C和C++,一个最大的特点就是不需要程序员自己手动去申请和释放内存,这一切交由JVM来完成。在Java中,运行时的
- 说在前面大一软件工程在读,java萌新一只,第一次写博客,技术很菜勿喷。如有错误欢迎指出!这个小程序是给朋友的生日礼物,耗时半天,实际写起来
- 本文实例讲述了C#使用listView增删操作的方法。分享给大家供大家参考。具体分析如下:应用场景: C#中使用listView控件,实现动
- 本文实例为大家分享了java自定义异常打印内容的具体代码,供大家参考,具体内容如下背景:在开发中,我们可能会使用到自定义异常,但是,这个自定
- application.ymlspring: datasource: username: root password
- 目录1)在程序集中添加资源2)在程序集中查找资源这一篇单独拿出来分析这个程序集资源,为的就是不想让大家把程序集资源和exe程序强关联,因为程
- 1 在图片上用鼠标进行操作,opencv主要用到setMouseCallback()函数。winname 窗口名称onMouse 鼠标事件的
- 1、仿照微信空间上传图片,显示图片数量以及超过最大,上传按钮隐藏功能2、上效果图3、上代码,主要是Adapter类/** * Created
- 本文实例讲述了Android编程使用HTTP协议与TCP协议实现上传文件的方法。分享给大家供大家参考,具体如下:Android上传文件有两种
- TreeWidget 目录树组件,该组件适用于创建和管理目录树结构,在开发中我们经常会把它当作一个升级版的ListView组件使用,因为Li
- 这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 1.抽象类与抽象方法:(1)使用关键字abstract修饰的类,称为抽象类.(2)抽象类只是用到一个类所具有的行为,不能单独通过创建对象来使
- 工厂模式定义:提供创建对象的接口。为何使用工厂模式工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java
- 命令仓库 Ctrl + Shift + A 可以搜集对应命令快捷键1、基础快捷键1.1、无处不在的跳转项目之间的跳转1.1.1、项目项目之间
- 在 Android 手机中内置了一款高性能 webkit 内核浏览器, SDK 中封装为一个叫做 WebView 组件。 WebView 类
- 方法一:res/values文件夹下建立styles.xml:<?xml version=“1.0″ encoding=“utf-8″
- 1.背景在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。之前我们通常利用public final s