项目启动加载配置,以及IP黑名单,使用CommandLineRunner和ApplicationRunner来实现(一般用在网关进行拦截黑名单)

//使用2个类的run方法都可以在项目启动时加载配置,唯一不同的是他们的参数不一样,CommandLineRunner的run方法参数是基本类型,ApplicationRunner的run方法参数是一个ApplicationArguments对象

下面做个ip黑名单的demo:

首先在application.yml配置ip黑名单,如下图

之后在启动时,加载进入内存:

package com.example.demo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

import java.util.HashSet;
import java.util.Set;

@Configuration
public class Ipconfig implements CommandLineRunner{
    @Value("${ipBlack._set}")
    private String ipBlack;

    public static final Set<String> ipblackSet=new HashSet<>();


    public void run(String... strings) throws Exception {
        if(StringUtils.isEmpty(ipBlack)){
            System.out.println("没有黑名单");
        }
        String[] split = ipBlack.split("\
");
        for (String s : split) {
            ipblackSet.add(s.trim());
        }
        System.out.println(ipblackSet);

    }
}
//为了测试2个类,谁的run方法先执行,下面写了一个demo:
package com.example.demo.config;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class IPConfig2 implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {

        System.out.println("是不是我先执行呢");
    }
}

注意:类上要加注解componet或者其他的,让spring管理,不然没效果
结果如图:

 

原文地址:https://www.cnblogs.com/yangxiaohui227/p/11193313.html