说说如何在SpringBoot中启动加载全局变量

前言

需要加载全局变量的情况很常见,如取通用的系统初始化配置等

Spring Boot 可以通过实现 CommandLineRunner 或 ApplicationRunner 接口,让某些代码在 Spring Boot 应用启动之后执行。因此,在启动时从数据库加载全局变量,可以在这些接口的 run() 方法中实现

实现步骤

1.定义一个全局变量类,如下:

@Component
public class GlobalVariables {

    private static Map globalMap = new HashMap<>();

    public static String getVariable(String key) {
        return globalMap.get(key);
    }

    @PostConstruct
    public void loadGlobalVariables() {
        List variables = ... //从数据库加载所有变量
        for (Variable variable: variables) {
            globalMap.put(variable.getName(), variable.getValue());
        }
    }
}

在这个类中,全局变量被定义为一个静态 Map 对象,其中 key 是变量名,value 是变量值

在 PostConstruct 注解的方法中,从数据库中加载所有变量,并将它们放到全局 Map 中

2.在启动时调用 GlobalVariables.loadGlobalVariables() 方法

可通过实现 CommandLineRunner 或 ApplicationRunner 接口实现

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

    @Autowired
    private GlobalVariables globalVariables;

    @Override
    public void run(String... args) throws Exception {
        globalVariables.loadGlobalVariables();
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

在 MyApplication 类中,实现了 CommandLineRunner 接口,并将其注入 GlobalVariables 对象

在 run() 方法中调用 GlobalVariables.loadGlobalVariables() 方法,从而在启动时从数据库加载所有全局变量

原理分析

GlobalVariables 类使用了 @PostConstruct 注解,这意味着该方法会在该类的实例被创建并初始化之后被调用,在该类的 loadGlobalVariables() 方法中,我们从数据库加载了所有的全局变量,并将它们存到 static 修饰的 Map 中

MyApplication 类实现了 CommandLineRunner 接口,并将其注入了 GlobalVariables 对象,因此,在应用启动后,Spring 会调用 run 方法,并执行 GlobalVariables.loadGlobalVariables() 方法,从数据库中加载全局变量,并将它们存到全局 Map 中

通过这种方式,我们就可以在整个应用程序中使用这些全局变量了

你可能感兴趣的:(Java,spring,boot,java,spring,后端,架构)