System.getproperty(“ spring.profiles.active”)在JPA实体侦听器中始终为Null

时间:2019-01-15 13:45:52

标签: java spring-boot jpa entitylisteners

我正在尝试使用JPASystem.getproperty("spring.profiles.active")实体侦听器中获取Spring活动配置文件。但是它总是返回Null配置文件。但是,我已检查服务器并正确配置了配置文件。

我尝试使用Environment来获取Spring活动概要文件,但是在侦听器中,我也无法@Autowired Environment。

    @PostUpdate

    public void methodInvoked afterUpdate(Example example){

    String activeProfile = System.getproperty("spring.profiles.active");  

    }

请提供任何指导!

3 个答案:

答案 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()方法。这将返回所有活动配置文件的字符串数组。

请参见

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/env/Environment.html#getActiveProfiles--

不要依赖“ spring.profiles.active”,因为可能没有设置-此属性用于通过属性设置值,并且它的值不反映哪些配置文件处于活动状态,因为这些配置文件可能已经处于活动状态以编程方式设置。

答案 2 :(得分:0)

改用 boolean Environment.acceptsProfiles(String ...profiles)。

Javadoc:

<块引用>

返回一个或多个给定配置文件是否处于活动状态,或者在没有明确的活动配置文件的情况下,返回一个或多个给定配置文件是否包含在一组默认配置文件中。如果配置文件以 '!' 开头逻辑被反转,即如果给定的配置文件未激活,该方法将返回 true。例如, env.acceptsProfiles("p1", "!p2")

<块引用>

如果配置文件“p1”处于活动状态或“p2”未处于活动状态,则返回 true。

它使 spring.profiles.activespring.profiles.default 列表合理化。这意味着如果 my-profile 在默认列表中,但 !my-profile 在您询问是否接受 my-profile 时在活动列表中strong> 它将返回 false

这主要是通过受保护的 AbstractEnvironment.isProfileActive(profile) 方法完成的,如果您创建自定义环境,您可以使用该方法。