如何在启动时加载 spring @PropertySource
How to load spring @PropertySource at startup
我注意到启动期间使用的某些属性只能在 application.properties
中设置。
例如:
src/main/java/foo/bar/Foo.java
@SpringBootApplication
public class Foo {
private static final Logger log = LoggerFactory.getLogger(Foo.class);
public static void main(String... args) {
ApplicationContext appContext = SpringApplication.run(Foo.class, args);
log.info(appContext.getEnvironment().getProperty("spring.profiles.active"));
}
}
src/main/resources/application.properties
spring.profiles.active=dev
控制台日志:
09:23:48.827 : The following profiles are active: dev
09:23:50.832 : dev
配置文件在启动时被识别为 dev
并且在 Environment
中可用。这是预期的行为。
但是,如果我将相同的 属性 从 application.properties
移动到 foo.properties
并将其加载为 @PropertySource
,行为会发生变化。
src/main/java/foo/bar/FooConfiguration.java
@Configuration
@PropertySource("classpath:foo.properties")
public class FooConfiguration { }
src/main/resources/foo.properties
spring.profiles.active=prod
src/main/resources/application.properties
# empty
控制台日志:
09:35:18.141 : No active profile set, falling back to default profiles: default
09:35:20.175 : prod
配置文件在启动期间不被考虑,但在启动后 Environment
可用。
问题: 如何从 @PropertySource
加载属性并使它们在启动时可用,同时加载 application.properties
的其余部分?
我认为您可以使用“--spring.config.location”属性 来指定要使用的 属性 文件。
我注意到启动期间使用的某些属性只能在 application.properties
中设置。
例如:
src/main/java/foo/bar/Foo.java
@SpringBootApplication
public class Foo {
private static final Logger log = LoggerFactory.getLogger(Foo.class);
public static void main(String... args) {
ApplicationContext appContext = SpringApplication.run(Foo.class, args);
log.info(appContext.getEnvironment().getProperty("spring.profiles.active"));
}
}
src/main/resources/application.properties
spring.profiles.active=dev
控制台日志:
09:23:48.827 : The following profiles are active: dev
09:23:50.832 : dev
配置文件在启动时被识别为 dev
并且在 Environment
中可用。这是预期的行为。
但是,如果我将相同的 属性 从 application.properties
移动到 foo.properties
并将其加载为 @PropertySource
,行为会发生变化。
src/main/java/foo/bar/FooConfiguration.java
@Configuration
@PropertySource("classpath:foo.properties")
public class FooConfiguration { }
src/main/resources/foo.properties
spring.profiles.active=prod
src/main/resources/application.properties
# empty
控制台日志:
09:35:18.141 : No active profile set, falling back to default profiles: default
09:35:20.175 : prod
配置文件在启动期间不被考虑,但在启动后 Environment
可用。
问题: 如何从 @PropertySource
加载属性并使它们在启动时可用,同时加载 application.properties
的其余部分?
我认为您可以使用“--spring.config.location”属性 来指定要使用的 属性 文件。