SpringBoot万字爆肝高级配置

 更新时间:2022年07月18日 09:11:36   作者:不会压弯的小飞侠  
SpringBoot不仅支持常规的properties配置文件,还支持yaml语言的配置文件,yaml是以数据为中心的语言,在配置数据的时候具有面向对象的特征。application.properties是比较常见的配置文件,SpringBoot的全局配置文件的作用是对一些默认配置的配置值进行修改

@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"

运行结果:

到此这篇关于SpringBoot万字爆肝高级配置的文章就介绍到这了,更多相关SpringBoot高级配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot拦截器实现项目防止接口重复提交

    SpringBoot拦截器实现项目防止接口重复提交

    基于SpringBoot框架来开发业务后台项目时,接口重复提交是一个常见的问题,本文主要介绍了SpringBoot拦截器实现项目防止接口重复提交,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • MyEclipse如何将项目的开发环境与服务器的JDK 版本保持一致

    MyEclipse如何将项目的开发环境与服务器的JDK 版本保持一致

    我们使用MyEclipse开发Java项目开发中,偶尔会遇到因项目开发环境不协调,导致这样那样的问题,在这里以把所有环境调整为JDK1.6 为例,给大家详细介绍MyEclipse如何将项目的开发环境与服务器的JDK 版本保持一致,需要的朋友参考下吧
    2024-04-04
  • 常用java正则表达式的工具类

    常用java正则表达式的工具类

    这篇文章主要为大家详细介绍了常用java正则表达式的工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • spring boot集成p6spy的最佳实践

    spring boot集成p6spy的最佳实践

    这篇文章主要介绍了spring boot集成p6spy的最佳实践-p6spy-spring-boot-starter的项目案例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • java文件重命名(文件批量重命名)实例程序代码分享

    java文件重命名(文件批量重命名)实例程序代码分享

    这篇文章主要介绍了java文件重命名的程序代码,大家参考使用吧
    2013-12-12
  • JSON中fastjson、jackson、gson如何选择

    JSON中fastjson、jackson、gson如何选择

    在Java中,JSON的解析方式很多,例如fastjson(阿里)、Gson(谷歌)、jackjson等,本文主要介绍了JSON中fastjson、jackson、gson如何选择,具有一定的参考价值,感兴趣的可以了解一下
    2021-12-12
  • Java毕业设计实战之二手书商城系统的实现

    Java毕业设计实战之二手书商城系统的实现

    这是一个使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP开发的二手书商城系统,是一个毕业设计的实战练习,具有在线书城该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • springboot项目打包成jar包的图文教程

    springboot项目打包成jar包的图文教程

    有时候我们会用IDEA来开发一些小工具,需要打成可运行的JAR包,这篇文章主要给大家介绍了关于springboot项目打包成jar包的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 详解eclipse项目中的.classpath文件原理

    详解eclipse项目中的.classpath文件原理

    这篇文章介绍了eclipse项目中的.classpath文件的原理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Java中使用标签(label)来控制循环的执行流程

    Java中使用标签(label)来控制循环的执行流程

    java 和 label 两个完全不相干的词,今天我把他们连接在一起了,试想一个问题,双循环在不使用 return 的情况下,如何停止外循环?所以本文给大家介绍了Java中使用标签(label)来控制循环的执行流程,需要的朋友可以参考下
    2024-06-06

最新评论