-->

What is the equivalent of Spring's `@Profile`

2019-08-20 07:38发布

问题:

I'm used to using Spring and have heavily used @Profile for different configurations for local/dev/production environments. We've moved to microprofile - is there an equivalent easy way to specify different configurations at runtime with microprofile?

回答1:

You can use Environment with @Requires / @Requirements , simple example with env = "foo":

Application.java:

package helloworld;

import io.micronaut.context.ApplicationContext;
import io.micronaut.runtime.Micronaut;

public class Application {

    public static void main(String[] args) {
        ApplicationContext context = Micronaut.run(Application.class);
        SomeService someService = context.getBean(SomeService.class);

        someService.doWork();
        Optional<String> someProperty = context.getProperty("some.property", String.class);
        System.out.println("some.property=" + someProperty.get());
    }

}

SomeService.java:

package helloworld;

public interface SomeService {

    void doWork();

}

SomeServiceFoo.java for foo env:

package helloworld;

import io.micronaut.context.annotation.Requires;

import javax.inject.Singleton;

@Singleton
@Requires(env = "foo")
public class SomeServiceFoo implements SomeService {

    @Override
    public void doWork() {
        System.out.println("SomeServiceFoo work");
    }

}

SomeServiceBar.java for bar env:

package helloworld;

import io.micronaut.context.annotation.Requires;

import javax.inject.Singleton;

@Singleton
@Requires(env = "bar")
public class SomeServiceBar implements SomeService {

    @Override
    public void doWork() {
        System.out.println("SomeServiceBar work");
    }

}

application-foo.yml properties for foo env

some:
  property: some-property-foo

application-bar.yml properties for bar env

some:
  property: some-property-bar

run application:

java -Dmicronaut.environments=foo -jar helloworld-0.1.jar

application output:

SomeServiceFoo work
some.property=some-property-foo

Also you can setup Environment variables MICRONAUT_ENVIRONMENTS=bar,bar2

and take a look at Cloud Configuration with already defined Environment

P.S. for IntelliJ IDEA (Run/Debug Configurations) also setup preferred Environment variables MICRONAUT_ENVIRONMENTS=bar