Including bean definition when a profile is NOT active

JavaSpringSpring ProfilesNegation

Java Problem Overview


In my application I use several profiles to make certain beans eligible for autowiring. What I'm missing is the possibility to make a bean eligible for autowiring when a certain profile is NOT active.

The best way of doing it that I thought about is like this:

  1. Let's suppose we have a list of all possible profiles, e.g. {A, B, C, D}.
  2. Profiles active for particular execution are {A, C}.
  3. What I do is I create artificial profiles for all possible profiles which are not active. In the example case I would create {not_B, not_D} profiles.
  4. The beans I want to be active based on not active profile X I make active for profile not_X. In my case if I wanted a bean to be eligible for autowiring when profile B is not active, I would annotate them @Profile("not_B")

This solution however requires an up-front knowledge about all possible profiles.

Can you think of any better solution?

Java Solutions


Solution 1 - Java

You can use a not (!) operator... but you have to use Spring 3.2 M1.

> The following syntax is now supported > > >
> @Profile({"A", "!B"}) > > indicating that the element or annotated component should be processed only if profile 'A' is active or profile 'B' is not active.

See change announced here: Spring Framework 3.2 M1 Released
The commit is at GitHub: Support not (!) operator for profile selection
Issue in JIRA: SPR-8728

If upgrading to Spring 3.2 is not possible for your project, I would recommend not using the @Profile approach and ensuring that the bean is not created in your Spring configuration.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShyJView Question on Stackoverflow
Solution 1 - JavaaweigoldView Answer on Stackoverflow