一个业务通常由多个系统、多个功能模块组成,为保证某些业务的动态性,后端程序通常会用开关来控制程序的逻辑,以达到在系统运行时切换运行逻辑的目的。本文介绍如何新增功能开关。
前提条件
您已接入新应用,详情请参见使用SDK接入和使用Spring Boot Starter接入。
通过Java SDK接入
通过Java SDK接入的应用请参见以下步骤新增功能开关。
- 定义功能开关。
在字段上加上
com.taobao.csp.switchcenter.annotation.AppSwitch
注解,字段修饰符必须为public static
。例如以下代码:
public class CommonTypeSwitch { @AppSwitch(des = "String 类型开关", level = Level.p2) public static String stringSwitch = "string"; @AppSwitch(des = "Integer 类型开关", level = Level.p1) public static Integer integerSwitch = 2; @AppSwitch(des = "Boolean 类型开关", level = Level.p4) public static Boolean booleanSwitch = true; @AppSwitch(des = "AtomicInteger 类型开关", level = Level.p1) public static AtomicInteger atomicIntegerSwitch = new AtomicInteger(21); @AppSwitch(des = "AtomicBoolean 类型开关", level = Level.p1) public static AtomicBoolean atomicBooleanSwitch = new AtomicBoolean(true); @AppSwitch(des = "AtomicLong 类型开关", level = Level.p1) public static AtomicLong atomicLongSwitch = new AtomicLong(4L); @AppSwitch(des = "泛型为 String List 类型开关", level = Level.p1) public static List<String> stringListSwitch = new ArrayList<String>(); @AppSwitch(des = "泛型是<Integer, String> Map 开关", level = Level.p4) public static Map<Integer, String> INT_STRING_MAP = new HashMap<Integer, String>(); @SuppressWarnings("deprecation") @AppSwitch(des = "Date类型开关", level = Level.p1) public static Date dateTypeSwitch = new Date(114, 6, 3); @AppSwitch(des = "BigInteger类型开关", level = Level.p1) public static BigInteger bigIntegerTypeSwitch = BigInteger.valueOf(38888); @AppSwitch(des = "BigDecimal类型开关", level = Level.p1) public static BigDecimal bigDecimalTypeSwitch = BigDecimal.valueOf(3.00000000001); @AppSwitch(des = "枚举类型开关", level = Level.p1) public static EnumType enumTypeSwitch = EnumType.ITEM1; @AppSwitch(des = "泛型为List<Integer>的LinkedList", level = Level.p1) public static List<List<Integer>> LIST_INT_LINKEDLIST = new LinkedList<List<Integer>>(); @AppSwitch(des = "泛型为<Map<String, Integer>, Map<String, Integer>>的HashMap", level = Level.p1) public static Map<Integer, Map<String, Map<String, Integer>>> MAP_MAP_HASHMAP = new HashMap<Integer, Map<String, Map<String, Integer>>>(); }
- 调用注册方法进行注册。
/* 应用调用此方法完成注册, 同时请保证应用在启动的时候, 调用过且知道用过一次此方法,多次调用会抛出异常。 应用名称可不填,不填取 project.name 启动参数的值其中,常量类参数是可变参数,可注册多个常量类。 如常量类未添加 com.taobao.csp.switchcenter.annotation.NameSpace 注解,默认使用完整类路径名作为 namespace。 */ SwitchManager.init("appName", CommonTypeSwitch.class);
- 配置启动参数。
- 非公网
//将 AppName 替换为自定义的应用名称。 ahas.namespace=default project.name=AppName
- 公网
//将AppName替换为自定义的应用名称,将<license>替换为真实值。 ahas.namespace=default project.name=AppName ahas.license=<license>
说明 仅公网环境接入需要 License,您可在新应用接入页面查看并保存 License,详情请参见查看并保存 license。
- 非公网
- 重新部署您的应用。
通过Spring Boot接入
通过Spring Boot接入的应用请参见以下步骤新增功能开关。
- 定义功能开关。
- 在相关开关类上加上
@Switch
注解。 - 在相关常量类上加
com.alibaba.csp.ahas.switchcenter.anotation.Switch
注解,同时在对应字段上加com.taobao.csp.switchcenter.annotation.AppSwitch
注解,字段修饰符必须为public static
。
@Switch public class SwitchConfig { @AppSwitch(des="Boolean 类型开关", level=Level.p2, callback=TestCallback.class) public static boolean test_switch = false; }
- 在相关开关类上加上
- 配置启动参数。
在application.properties中添加以下配置项。
- 非公网
#指定您要接入的特定的AHAS环境。 ahas.namespace=default #自定义您的应用名称。 project.name=AppName
- 公网
#指定您要接入的特定的AHAS环境。 ahas.namespace=default #自定义您的应用名称。 project.name=AppName #配置License信息。 ahas.license=<license>
说明 仅公网环境接入需要License,您可在新应用接入页面查看并保存License,详情请参见查看并保存 license。
- 非公网
- 重新启动您的应用。
执行结果
添加完成后,在功能开关页面单击目标应用的资源卡片,进入目标应用的开关列表页面,可查看到新增开关的相关信息。
更多信息
如果您需要自定义功能开关的分组,可在代码中添加com.taobao.csp.switchcenter.annotation.NameSpace
注解;如果没有自定义,分组类别默认取class后面的类名,请参见以下示例。
package com.taobao.csp.switchcenter.example;
import com.taobao.csp.switchcenter.annotation.AppSwitch;
import com.taobao.csp.switchcenter.annotation.NameSpace;
import com.taobao.csp.switchcenter.bean.Switch.Level;
@NameSpace(nameSpace="customNamespace") //customNamespace为自定义分组名。
public class PrimitiveTypeSwitch //PrimitiveTypeSwitch为默认分组名。
{
@AppSwitch(des="int 类型开关", level=Level.p1)
public static int primitiveIntSwitch=1;
@AppSwitch(des="doubel 类型开关", level=Level.p1)
public static double primitiveDoubleSwitch=1.121;
}
说明 其中
com.taobao.csp.switchcenter.bean.Switch.Level
指开关的重要程度,分为p1、p2、p3、p4四个档位,p1的重要程度最高,p4的重要程度最低。文档内容是否对您有帮助?