我正在尝试使用JPA
在System.getproperty("spring.profiles.active")
实体侦听器中获取Spring活动配置文件。但是它总是返回Null配置文件。但是,我已检查服务器并正确配置了配置文件。
我尝试使用Environment来获取Spring活动概要文件,但是在侦听器中,我也无法@Autowired
Environment。
@PostUpdate
public void methodInvoked afterUpdate(Example example){
String activeProfile = System.getproperty("spring.profiles.active");
}
请提供任何指导!
答案 0 :(得分:0)
如Environment
所述,在注入时应使用this answer bean。如果您正在构建Web应用程序,则SpringBeanAutowiringSupport
将起作用:
@Autowired
private Environment env;
@PostUpdate
public void methodInvoked afterUpdate(Example example) {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
String[] activeProfile = env.getActiveProfiles();
}
答案 1 :(得分:0)
将环境插入代码中,然后在环境上调用getActiveProfiles()方法。这将返回所有活动配置文件的字符串数组。
请参见
不要依赖“ spring.profiles.active”,因为可能没有设置-此属性用于通过属性设置值,并且它的值不反映哪些配置文件处于活动状态,因为这些配置文件可能已经处于活动状态以编程方式设置。
答案 2 :(得分:0)
改用 boolean Environment.acceptsProfiles(String ...profiles)。
Javadoc:
<块引用>返回一个或多个给定配置文件是否处于活动状态,或者在没有明确的活动配置文件的情况下,返回一个或多个给定配置文件是否包含在一组默认配置文件中。如果配置文件以 '!' 开头逻辑被反转,即如果给定的配置文件未激活,该方法将返回 true。例如, env.acceptsProfiles("p1", "!p2")
<块引用>如果配置文件“p1”处于活动状态或“p2”未处于活动状态,则返回 true。
它使 spring.profiles.active 和 spring.profiles.default 列表合理化。这意味着如果 my-profile 在默认列表中,但 !my-profile 在您询问是否接受 my-profile 时在活动列表中strong> 它将返回 false。
这主要是通过受保护的 AbstractEnvironment.isProfileActive(profile) 方法完成的,如果您创建自定义环境,您可以使用该方法。