基于springboot+enum配置化的方法

 更新时间:2024年09月18日 16:17:52   作者:一叶飞舟  
本文主要介绍利用Springboot结合枚举类enum进行自定义参数的初始化和应用,通过@Value注解实现参数的动态注入,以实现灵活可维护的配置管理,具有一定的参考价值,感兴趣的可以了解一下

前言

Springboot/Springcloud作为微服务开发的经典框架,我想任何一个developer不会排斥。同时,市场越来越多的业务开发均围绕Springboot/Springcloud而展开,也让它成为Java开发的“硬通货”

基于Spring,诸多低代码的平台的活跃,进一步促进了微服务领域技术的蓬勃发展,也减少了每个developer抽象的烦恼。正如spring宣传的口号:

Spring makes Java simpleSpring makes Java modernSpring makes Java productiveSpring makes Java reactive

它让Java变的“简单、先进、富有成效而又灵活”了。

在这里插入图片描述

今日,博主通过springboot+enum实现自定义参数的初始化和应用。

一. 自定义参数并创建一个enum

在springboot project中,我们通常会get一个yml文件,一般名为:bootstrap.yml。文件的大致内容是对当前service的定义和运行的描述,形如:

# Tomcat
server:
  port: 8080

# Spring
spring: 
  application:
    # 应用名称
    name: myapp

该文件指定了当前service 的端口号和名称,当然还可以添加更多你认为重要的参数。接下来,博主带这各位看看如何使用springboot+enum实现配置参数的获取和使用。

1. 自定义参数

首先定义一些参数,比如我们可以在bootstrap.yml中,添加以下参数:

api:
  url: https://testapi.com
  key: 123
  secret: 123456   

2. 自定义enum

再来定义一个枚举类MyEnum

public class MyEnum {

    public enum api {

        // 定义一个枚举,默认提供实际值,下一步通过配置参数替换
    	token("token","https://testapi.com/api/token"),
		;
		
    	private String code;
    	private String url;
		
		//定义构造器
		api(String code, String url){
    		this.code = code;
    		this.url = url;
    	}
    	
    	public String getCode() {
			return code;
		}

		public void setCode(String code) {
			this.code = code;
		}

		public String getUrl() {
			return url;
		}

		public void setUrl(String url) {
			this.url = url;
		}
    }
}

这里博主内置了一个token api的完整URL,显然不便于未来的维护。完成以上准备后,我们看看下一步如何使用自定义参数来改造它。

二. 在enum或bean中使用参数

1. @Value简介

我们知道基于springboot,有多种参数的加载(load)方式。这里博主以@Value为例进行说明。

@Value注解可以用来将外部的值动态注入到 Bean 中,通常用于属性的注入。可以用在字段或者方法上,但是不能直接用于static或者final修饰的字段上。使用该方式时,必须满足spring依赖注入的要求,否则无法生效。

2. 创建Java bean并注入参数

通过在指定的属性上,添加@Value("${XXX}"),实现参数注入。

@Component
@Data
public class ApiBean implements Serializable
{
    private static final long serialVersionUID = 1L;

    //key
    @Value("${api.key}")
    private String key;
    
    //secret
    @Value("${api.secret}")
    private String secret;
   
}

提示:该Bean必须添加@Component注解,否则无效。

3. 修改enum类并注入参数

public class MyEnum {

    //使用参数值
	static String apiUrl = MyEnum.api.MyEnumInit.urlRoot;

    public enum api {

        // 替换为参数提供的值
    	token("token",apiUrl+"/api/token"),
		;
		
    	private String code;
    	private String url;
		
		//定义构造器
		api(String code, String url){
    		this.code = code;
    		this.url = url;
    	}
    	
    	public String getCode() {
			return code;
		}

		public void setCode(String code) {
			this.code = code;
		}

		public String getUrl() {
			return url;
		}

		public void setUrl(String url) {
			this.url = url;
		}
		// 看这里,新增内部类,支持注入
		@Component
        static class MyEnumInit{
			private static String urlRoot;
			@Value("${api.url}")
        	public void getUrl(String url) {
        		MyEnumInit.urlRoot = url;
        	}
        }
    }
}

提示:内部类必须添加@Component注解,否则无效。

关键的实现是enum中内部类的定义:MyEnumInit。通过内部类实现依赖注入,完成url配置参数的获取。这是“曲线救国”的典型实践。

结语

本案例通过@Value注解实现自定义参数的使用。通过Java bean和enum两种形式,实现配置参数的注入,从而满足不同场景的使用需求。

到此这篇关于基于springboot+enum配置化的方法的文章就介绍到这了,更多相关springboot+enum配置化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java如何利用return结束方法调用

    Java如何利用return结束方法调用

    这篇文章主要介绍了Java如何利用return结束方法调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • java判断中文字符串长度的简单实例

    java判断中文字符串长度的简单实例

    下面小编就为大家带来一篇java判断中文字符串长度的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • SpringBoot2.1.3修改tomcat参数支持请求特殊符号问题

    SpringBoot2.1.3修改tomcat参数支持请求特殊符号问题

    最近遇到一个问题,比如GET请求中,key,value中带有特殊符号,请求会报错。接下来通过本文给大家分享解决SpringBoot2.1.3修改tomcat参数支持请求特殊符号 ,需要的朋友可以参考下
    2019-05-05
  • SpringMVC中@ModelAttribute注解的使用教程

    SpringMVC中@ModelAttribute注解的使用教程

    在SpringMVC中,我们可以通过使用@ModelAttribute注解标记方法,实现类似于Struts2中Preparable拦截器的效果,这篇文章主要给大家介绍了关于SpringMVC中@ModelAttribute注解使用的相关资料,需要的朋友可以参考下
    2021-08-08
  • java按照模板导出pdf或word文件详细代码

    java按照模板导出pdf或word文件详细代码

    有时候业务中我们需要使用pdf模板生成一份pdf文件,下面这篇文章主要给大家介绍了关于java按照模板导出pdf或word文件的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-11-11
  • Java实现基于UDP协议的网络通信UDP编程

    Java实现基于UDP协议的网络通信UDP编程

    在Java中使用UDP编程,仍然需要使用Socket,因为应用程序在使用UDP时必须指定网络接口(IP地址)和端口号。注意:UDP端口和TCP端口虽然都使用0~65535,但他们是两套独立的端口,即一个应用程序用TCP占用了端口1234,不影响另一个应用程序用UDP占用端口1234
    2023-04-04
  • 实例讲解Java批量插入、更新数据

    实例讲解Java批量插入、更新数据

    这片文章介绍了一个Java批量添加数据,多个字段同时添加多条数据具体实例,面向的是Oracle数据库,需要的朋友可以参考下
    2015-07-07
  • RocketMQ中消费者概念和消费流程详解

    RocketMQ中消费者概念和消费流程详解

    这篇文章主要介绍了RocketMQ中消费者概念和消费流程详解,RocketMQ是一款高性能、高可靠性的分布式消息中间件,消费者是RocketMQ中的重要组成部分,消费者负责从消息队列中获取消息并进行处理,需要的朋友可以参考下
    2023-10-10
  • 详解Java中类的加载顺序

    详解Java中类的加载顺序

    Java中什么时候类加载,第一次需要使用类信息时加载。类加载的原则:延迟加载,能不加载就不加载。下面这篇文章主要介绍了Java中类的加载顺序,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • Java实现月饼的制作、下单和售卖功能

    Java实现月饼的制作、下单和售卖功能

    这篇文章主要介绍了Java实现月饼的制作、下单和售卖,借此机会,我们用Lambda实现一遍月饼制作,下单,售卖的开发设计模式,主要有制作月饼的工厂模式,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论