开发者

基于springboot+enum配置化的方法

开发者 https://www.devze.com 2024-09-19 10:27 出处:网络 作者: 一叶飞舟
目录前言一. 自定义参数并创建一个enum1. 自定义参数2. 自定义enum二. 在enum或bean中使用参数1. @Value简介2. 创建Java bean并注入参数3. 修改enum类并注入参数结语前言
目录
  • 前言
  • 一. 自定义参数并创建一个enum
    • 1. 自定义参数
    • 2. 自定义enum
  • 二. 在enum或bean中使用参数
    • 1. @Value简介
    • 2. 创建Java bean并注入参数
    • 3. 修改enum类并注入参数
  • 结语

    前言

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

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

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

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

    基于springboot+enum配置化的方法

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

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

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

    # Tomcat
    server:
    rPZeywpYvQ  port: 8080
    
    # Spring
    spring: 
      application:
        # 应用名称
        name: myapp
    

    该文件指定了当前service 的端口号和名称,当然还可以添加更多你认为重要的参数。接下来,博主带这各位看看如何使用spphpringboot+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
            stajstic 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配置化内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消