Spring的Microprofile的@@ Profile注释相当于什么?

时间:2019-06-13 08:20:24

标签: spring microprofile

我习惯于使用Spring,并且经常使用@Profile进行本地/开发/生产环境的不同配置。我们已经转移到微配置文件了-有一种等效的简便方法可以在运行时使用微配置文件指定不同的配置吗?

1 个答案:

答案 0 :(得分:1)

您可以将Environment@Requires / @Requirements结合使用,将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 用于bar环境:

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");
    }

}
foo环境的

application-foo.yml 属性

some:
  property: some-property-foo
bar环境的

application-bar.yml 属性

some:
  property: some-property-bar

运行应用程序:

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

应用程序输出:

SomeServiceFoo work
some.property=some-property-foo

您还可以设置环境变量MICRONAUT_ENVIRONMENTS=bar,bar2

看看已经定义了Cloud ConfigurationEnvironment

P.S。对于 IntelliJ IDEA (运行/调试配置),还设置了首选的环境变量 MICRONAUT_ENVIRONMENTS=bar