可以通过在org.springframework.cloud.bootstrap.BootstrapConfiguration
键下添加条目/META-INF/spring.factories
来训练引导上下文来执行任何您喜欢的操作。这是用于创建上下文的Spring @Configuration
类的逗号分隔列表。您可以在此处创建要用于自动装配的主应用程序上下文的任何bean,并且还有ApplicationContextInitializer
类型的@Beans
的特殊合同。如果要控制启动顺序(默认顺序为“最后”),可以使用@Order
标记类。
警告
|
添加自定义BootstrapConfiguration 时,请注意,您添加的类不是错误的@ComponentScanned 到您的“主”应用程序上下文中,可能不需要它们。对于您的@ComponentScan 或@SpringBootApplication 注释配置类尚未涵盖的启动配置类,请使用单独的包名称。 |
引导过程通过将初始化器注入主SpringApplication
实例(即正常的Spring Boot启动顺序,无论是作为独立应用程序运行还是部署在应用程序服务器中)结束。首先,从spring.factories
中找到的类创建引导上下文,然后在ApplicationContextInitializer
类型的所有@Beans
添加到主SpringApplication
开始之前。
自定义引导属性源
引导过程添加的外部配置的默认属性源是Config Server,但您可以通过将PropertySourceLocator
类型的bean添加到引导上下文(通过spring.factories
)添加其他源。您可以使用此方法从其他服务器或数据库中插入其他属性。
作为一个例子,请考虑以下微不足道的自定义定位器:
@Configuration
public class CustomPropertySourceLocator implements PropertySourceLocator {
@Override
public PropertySource<?> locate(Environment environment) {
return new MapPropertySource("customProperty",
Collections.<String, Object>singletonMap("property.from.sample.custom.source", "worked as intended"));
}
}
传入的Environment
是要创建的ApplicationContext
的Environment
,即为我们提供额外的属性来源的。它将已经具有正常的Spring Boot提供的资源来源,因此您可以使用它们来定位特定于此Environment
的属性源(例如通过将其绑定在spring.application.name
上,如在默认情况下所做的那样Config Server属性源定位器)。
如果你在这个类中创建一个jar,然后添加一个META-INF/spring.factories
包含:
org.springframework.cloud.bootstrap.BootstrapConfiguration=sample.custom.CustomPropertySourceLocator
那么“customProperty”PropertySource
将显示在其类路径中包含该jar的任何应用程序中。