I need to add multiple implementations of an interface and one of them should be picked up based on profile.
For e.g.
interface Test{
public void test();
}
@Service
@Profile("local")
class Service1 implements Test{
public void test(){
}
}
@Service
class Service2 implements Test{
public void test(){
}
}
@SpringBootApplication
public class Application {
private final Test test;
public Application(final Test test) {
this.test = test;
}
@PostConstruct
public void setup() {
test.test();
}
}
My intention is when I use -Dspring.profiles.active=local then Service1 should be called or else service2 should be called but I am getting an exception that the bean for Test is missing.
Add default profile for Service2
:
@Service
@Profile("default")
class Service2 implements Test{
public void test(){
}
}
the bean will only be added to the context if no other profile is identified. If you pass in a different profile, e.g. -Dspring.profiles.active="demo", this profile is ignored.
If you want for all profile except local use NOT operator:
@Profile("!local")
If a given profile is prefixed with the NOT operator (!), the annotated component will be registered if the profile is not active
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With