Danni,Johny和Java功能标志问题
#网络开发人员 #java #springboot #backend

什么是功能切换

想象您正在为Java应用程序构建一项新功能。在将其推出给所有人之前,您想与一小群用户一起测试该功能。您可以通过创建两个版本的应用程序来做到这一点,一个版本启用了新功能,另一个具有新功能禁用。但这需要您将应用程序的两个不同版本部署到生产中,这可能很耗时且困难。

相反,您可以使用功能切换。功能切换是一个变量,您可以在运行时启用或禁用应用程序中的功能。这意味着您可以将应用程序的单个版本部署到生产中,然后使用功能切换来控制是否启用了不同用户的新功能。

丹尼和约翰尼问题

想象一下情况 Danny Big-B 的唯一女儿,丹尼的父亲
太保护她了。他从不允许丹尼参加聚会或任何郊游。他在医院工作,当时是医生,这是不确定他什么时候去医院回来的。丹尼(Danny)有一个男朋友约翰尼(Johny),他太多了,他从来没有时间与丹尼(Danny)放松。因此,他们一起发现了一个解决方案。他们贿赂了 ramu kaka ,在医院前经营茶摊,他们将告知Wheather Big-B医院或留给Hoe,因此Johny和Danny都可以一起聚会。 /p>

让我们了解时间顺序

  1. papa_home是 johny danny 是依赖的功能
  2. Johny 将为Party
  3. 称呼 Danny
  4. Danny 将继续寻找 ramu kaka 的信息。
  5. 他们将决定是否基于 ramu kaka的信息参加聚会。

Problem image

解决方案

对于解决方案,我们有几个库,我选择了 ff4j (Java的功能标志)。以下是带有解释的代码段。

1.前往Spring Intializer并创建一个入门弹簧靴项目。

我不给您使用哪个版本的sh*t,但是如果您使用的是Spring Boot 3.X,则必须使用Java 17或更高版本。 gradle还是小男人?我不在乎。我和gradle一起去了。

2.将以下行注入您对Gradle的依赖性。

implementation 'org.ff4j:ff4j-core:2.0.0'.
如果您使用的是Maven,请转到Maven Central Repository并找到自己的依赖性,

3.创建一个Java配置,例如FF4JCONFIG或您想要的任何f*ck。

在哪里创建?这块sh*t不适合您。

4.添加以下行。
@Configuration //This piece of shit will tell spring boot that this is a configuration class
public class FF4jConfig {
    //Feature Name Definition
    public static final String PAPA_FEATURE = "PAPA_FEATURE";

    /*
    * FF4J Configuration
    * Create one bean of type FF4J. Why? Because concept of overriding is dying
    * Create of instance of FF4j. Obviously to use it further
    * Register your Feature
    * Enable or disable according to you
    * You are done, Thank me later (Code Below ⬇️)_
    */
    @Bean
    public FF4j ff4j(){
        FF4j ff4j = new FF4j();
        Feature papaFeature = new Feature(PAPA_FEATURE);
        papaFeature.disable(); //Default we will disable this feature later we will be enable
        ff4j.createFeature(papaFeature);
        return ff4j;
    }
}
5.为拉木·卡卡(Ramu Kaka)和约翰尼(Johny)定义您的API终点。
    @GetMapping(path = "/should-we-party")
    public String shouldWeParty(){
        if(ff4j.check(FF4jConfig.PAPA_FEATURE))
            return "Yeah Johny Lets Go for party";
        else
            return "Sorry Johny, Papa is at Home";
    }

    /*
     * End-point will change the status of the feature
     * In our case it will notify johny about status of papa
     */
    @PostMapping(path = "/papa-at-hospital/{isAtHospital}")
    public String papaAtHospital(@PathVariable boolean isAtHospital){
        if(isAtHospital){
            ff4j.enable(FF4jConfig.PAPA_FEATURE);
            return ("Message deliverd to danny: PAPA IS AT HOSPITAL, GO PARTY");
        }
        else {
            ff4j.disable(FF4jConfig.PAPA_FEATURE);
            return ("Message deliverd to danny: PAPA LEFT HOSPITAL, COME BACK");
        }
    }

不要忘记在使用
之前自动自动化FF4J进行实例化

@Autowired
    FF4j ff4j;

结果

以下是 johny danny out的终点。

should-we-party endo point

以下是 ramu kaka danny out的终点。

papa-at-hospital

一次 ramu kaka 通知 danny big-b 正在医院, johny 将得到以下回应打电话 Danny

Success Response

得到了这一回应后,约翰和丹尼参加了聚会。故事的其余部分从浏览器历史上清除

获取Github/0x4E43

的完整代码

谢谢