2

我有一个名为 initParameters.properties 的文件,其中包含一个名为 spring.profiles.active 的键,它正在被过滤,但这还不够,因为 Spring 还不知道这个属性。
我使用AbstractAnnotationConfigDispatcherServletInitializer作为我的 WebAppInitializer
,这是它的重要部分:

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    super.onStartup(servletContext);
    setInitParameters(servletContext);
}

@SneakyThrows
private void setInitParameters(ServletContext servletContext) {
    Properties initParams = new Properties();
    initParams.load(new ClassPathResource("initParameters.properties").getInputStream());
    initParams.stringPropertyNames().stream().forEach(propertyName -> CHOOSE_OPTION_HERE);
}

选项1:

servletContext.setInitParameter(propertyName, initParams.getProperty(propertyName))

选项 2:

System.setProperty(propertyName, initParams.getProperty(propertyName))

两种方式都有效,我只是不知道它们之间有什么区别,除了一个是系统属性,另一个是 initParameter。
Ofc,当我在启动应用程序时设置系统属性 -Dspring.profiles.active=someProfile 时,它​​会覆盖所有内容,甚至是我的 .properties 文件中的过滤,所以一切都很好。
我在整个互联网上寻找一些解释,优点/缺点,但找不到任何东西。
此外,如果有一种方法可以直接从 .properties 文件通知 spring 属性,我也想知道如何(也就是跳过 setInitParameters 部分)。我认为 Spring Boot 会自动检测到它,但我没有使用它,所以想知道 Spring 中是否有类似的东西。谢谢你的时间。

4

0 回答 0