互斥的bean加载
Mutally exclusive bean loading
我正在使用 spring-boot 并希望根据传递的配置文件有条件地加载两个 bean。
@Configuration
@Profile("secure")
public class Secured ... //this should only load when "secure" is supplied
@Configuration
public class NotSecured ... //this should be the default
所以基本上:
如果用户通过 --spring.profiles.active=secured
我希望加载 Secured bean 但不加载 NotSecured bean。默认情况下,它应该只加载 NotSecured bean。
这可能吗?
您可以使用 '!' not 运算符,即用 @Profile("!secure")
注释 Bean/Configuration class 并且它仅在 'secure' 配置文件未激活时使用。
您还可以使用此注释明确指定默认配置文件设置:
@Profile("default")
- 或类似
@Profile({"insecure","default"}
的值
值得注意的是,任何未指定配置文件的 bean 都属于默认配置文件。
令我惊讶的是,如果您对一项服务有多个实现,并且其中一个用 @Primary
和 @Profile(...)
注释,则将注入具有 默认配置文件的 bean 如果配置文件 未 配置( 配置示例 applications.properties
: spring.profiles.active=val1,val2,...
).
换句话说,当在任何实现中使用 @Profile
时,似乎不会考虑 @Primary
注释;如果没有定义配置文件,将使用 default(这可能是没有 @Profile
注释的实现,因为它成为默认值!)。
<!-- Tested for -->
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
我正在使用 spring-boot 并希望根据传递的配置文件有条件地加载两个 bean。
@Configuration
@Profile("secure")
public class Secured ... //this should only load when "secure" is supplied
@Configuration
public class NotSecured ... //this should be the default
所以基本上:
如果用户通过 --spring.profiles.active=secured
我希望加载 Secured bean 但不加载 NotSecured bean。默认情况下,它应该只加载 NotSecured bean。
这可能吗?
您可以使用 '!' not 运算符,即用 @Profile("!secure")
注释 Bean/Configuration class 并且它仅在 'secure' 配置文件未激活时使用。
您还可以使用此注释明确指定默认配置文件设置:
@Profile("default")
- 或类似
@Profile({"insecure","default"}
的值
值得注意的是,任何未指定配置文件的 bean 都属于默认配置文件。
令我惊讶的是,如果您对一项服务有多个实现,并且其中一个用 @Primary
和 @Profile(...)
注释,则将注入具有 默认配置文件的 bean 如果配置文件 未 配置( 配置示例 applications.properties
: spring.profiles.active=val1,val2,...
).
换句话说,当在任何实现中使用 @Profile
时,似乎不会考虑 @Primary
注释;如果没有定义配置文件,将使用 default(这可能是没有 @Profile
注释的实现,因为它成为默认值!)。
<!-- Tested for -->
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>