项目启动加载配置,以及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("\\\n"); 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管理,不然没效果 结果如图: