SpringBoot万字爆肝高级配置

作者:不会压弯的小飞侠 时间:2022-09-17 06:34:08 

@ConfigurationProperties注入

创建一个新的模板

此过程就不在这介绍了,在我SpringBoot专栏里有详细过程。

⭐⭐⭐注意的是加入所需的支持这什么也不勾选。

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注释警告

SpringBoot万字爆肝高级配置

加入依赖:

<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

SpringBoot万字爆肝高级配置

DataUnit

SpringBoot万字爆肝高级配置

数据校验

🔥添加了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,测试结果如下

SpringBoot万字爆肝高级配置

进制数据转换规则

案例模拟

🔥编写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"

运行结果:

SpringBoot万字爆肝高级配置

来源:https://blog.csdn.net/qq_43514330/article/details/125810049

标签:SpringBoot,高级,配置
0
投稿

猜你喜欢

  • Android SDK在线更新镜像服务器大全

    2023-03-14 05:44:27
  • Android 获取屏幕尺寸实例代码

    2023-07-26 21:50:47
  • java split用法详解及实例代码

    2022-06-27 06:48:19
  • Android 如何使用短信链接打开APP

    2022-01-09 02:45:25
  • Java ArrayList中存放引用数据类型的方式

    2023-11-16 15:23:46
  • Android完美实现平滑过渡的ViewPager广告条

    2023-10-01 13:05:31
  • c#系列 list详情

    2022-10-22 22:18:54
  • 浅谈MyBatis 事务管理

    2022-03-22 16:17:11
  • SpringBoot 配置文件加密的步骤

    2023-10-23 02:55:55
  • Java8中接口的新特性使用指南

    2023-01-21 15:19:26
  • 基于Java实现简单贪吃蛇游戏

    2022-08-07 02:09:44
  • Java 中Timer和TimerTask 定时器和定时任务使用的例子

    2022-04-21 17:50:27
  • 人工智能开发语言排行榜: 不死Java, 不朽C/C++, 新贵Python【推荐】

    2023-03-12 16:06:54
  • Android中EditText显示明文与密码的两种方式

    2021-09-13 07:35:39
  • 基于Silverlight DataGrid中无代码设置开始与结束日期DatePicker的实现方法

    2023-05-04 16:34:50
  • C#判断页面中的多个文本框输入值是否有重复的实现方法

    2022-10-30 19:41:56
  • C#串口通讯概念及简单的实现方法

    2021-06-25 13:49:24
  • 非常实用的侧滑删除控件SwipeLayout

    2023-02-01 14:52:39
  • Android Application级别自定义Toast

    2022-01-02 03:41:45
  • C#使用CallContext缓存线程数据

    2022-03-27 17:45:55
  • asp之家 软件编程 m.aspxhome.com