0


基于springboot+enum配置化实践

前言

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

“硬通货”

基于Spring,诸多

低代码

的平台的活跃,进一步促进了微服务领域技术的蓬勃发展,也减少了每个developer

抽象

的烦恼。正如spring宣传的口号:

Spring makes Java simple
Spring makes Java modern
Spring makes Java productive
Spring makes Java reactive

它让Java变的

“简单、先进、富有成效而又灵活”

了。

在这里插入图片描述

今日,博主通过

springboot+enum

实现自定义参数的初始化和应用。

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

在springboot project中,我们通常会get一个yml文件,一般名为:

bootstrap.yml

。文件的大致内容是对当前service的定义和运行的描述,形如:

# Tomcatserver:port:8080# Springspring:application:# 应用名称name: myapp

该文件指定了当前service 的端口号和名称,当然还可以添加更多你认为重要的

参数

。接下来,博主带这各位看看如何使用springboot+enum实现配置参数的获取和使用。

1. 自定义参数

首先定义一些参数,比如我们可以在

bootstrap.yml

中,添加以下参数:

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

2. 自定义enum

再来定义一个枚举类

MyEnum

publicclassMyEnum{publicenum api {// 定义一个枚举,默认提供实际值,下一步通过配置参数替换token("token","https://testapi.com/api/token"),;privateString code;privateString url;//定义构造器api(String code,String url){this.code = code;this.url = url;}publicStringgetCode(){return code;}publicvoidsetCode(String code){this.code = code;}publicStringgetUrl(){return url;}publicvoidsetUrl(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@DatapublicclassApiBeanimplementsSerializable{privatestaticfinallong serialVersionUID =1L;//key@Value("${api.key}")privateString key;//secret@Value("${api.secret}")privateString secret;}
提示

:该Bean必须添加

@Component

注解,否则无效。

3. 修改enum类并注入参数

publicclassMyEnum{//使用参数值staticString apiUrl =MyEnum.api.MyEnumInit.urlRoot;publicenum api {// 替换为参数提供的值token("token",apiUrl+"/api/token"),;privateString code;privateString url;//定义构造器api(String code,String url){this.code = code;this.url = url;}publicStringgetCode(){return code;}publicvoidsetCode(String code){this.code = code;}publicStringgetUrl(){return url;}publicvoidsetUrl(String url){this.url = url;}// 看这里,新增内部类,支持注入@ComponentstaticclassMyEnumInit{privatestaticString urlRoot;@Value("${api.url}")publicvoidgetUrl(String url){MyEnumInit.urlRoot = url;}}}}
提示

:内部类必须添加

@Component

注解,否则无效。

关键的实现是enum中内部类的定义:

MyEnumInit

。通过内部类实现依赖注入,完成url配置参数的获取。这是

“曲线救国”

的典型实践。

结语

本案例通过

@Value

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

在这里插入图片描述


本文转载自: https://blog.csdn.net/splendid_java/article/details/141858600
版权归原作者 一叶飞舟 所有, 如有侵权,请联系我们删除。

“基于springboot+enum配置化实践”的评论:

还没有评论