我不确定您是否要禁用日志记录系统的默认XML配置,但是您确实想在完成 后
执行自定义调用。幸运的是,这很容易,因为它尽可能早地在的初始化程序链中完成
SpringApplication。放置代码最简单的地方可能是
SpringApplicationInitializer(它也必须实现
ApplicationContextInitializer,因此可以将其添加到中
SpringApplication)。例如
SpringApplication application = new SpringApplication(MySources.class);application.addInitializers(new LoggingInitializer());application.run(args);
如果这样做,将无法将依赖项注入到初始化程序中,但是它将确保在生命周期中尽早调用它。如果您的初始化程序实现了,
EnvironmentAware那么您还将
Environment在调用之前被传递的实例,从而
SpringApplicationInitializer.initialize()可以解析示例中与环境相关的部分,例如
String loggingLevelRoot = environment.getProperty("logging.level.root");一旦工作,就可以避免对所有应用程序执行相同的操作,您可以通过添加一个
meta-INF/spring.factories包含初始化器的类使其声明性:
org.springframework.context.ApplicationContextInitializer=my.pkg.for.LoggingInitializer
如果您确实需要依赖项注入和
@Value解析,那么我认为您将不得不接受,
ApplicationContext在您有机会进行任何配置之前,将完全刷新。如果这是可以接受的折衷方案,我建议您仅
LoggingInitializer在您的上下文中添加a
并使其实现
CommandLineRunner。



