1

在我的 SpringBoot 应用程序中,我configObject在实现EnvironmentPostProcessor.

注入的类在启动时从不同的源读取数据,因为这是应用程序工作所必需的。

但是在启动应用程序时,configObject它会显示为 Null。

@SpringBootApplication
@EnableEncryptableProperties
@EnableConfigurationProperties
@EnableCaching
@Slf4j
public class SBApplication {
    public static void main(String[] args) {
        SpringApplication.run(SBApplication.class, args);
    }
}

以及调用 Autowired 对象的 AppEnvironmentPostProcessor 类。此类org.springframework.boot.env.EnvironmentPostProcessor在 spring.factories 中配置。该类在启动时被调用。

@Slf4j
public class AppEnvironmentPostProcessor implements
        EnvironmentPostProcessor, Ordered {

    @Autowired
    KeysConfig keysConfig;

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment,
                                       SpringApplication application) {
        // keysConfig is null
        String key = keysConfig.getSecretKeyMap().get("key12");
    }
}

在 KeysConfig 类中

@Component
public final class KeysConfig {
    public Map getSecretKeyMap() {
        //Returns key map
    }
}

我正在使用 Intellij Ultimate。我该如何调试和解决这个问题?

4

1 回答 1

2

EnvironmentPostProcessors 是在创建应用程序上下文之前创建的,因此在依赖注入可能之前。这意味着这@Autowired行不通。

您必须更新您的实现以创建KeysConfig自己的实例,或者使用模仿KeysConfig当前所做的任何事情的不同方法。

于 2021-06-18T12:32:14.823 回答