我习惯于使用Spring,并且经常使用@Profile
进行本地/开发/生产环境的不同配置。我们已经转移到微配置文件了-有一种等效的简便方法可以在运行时使用微配置文件指定不同的配置吗?
答案 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 Configuration的Environment
P.S。对于 IntelliJ IDEA (运行/调试配置),还设置了首选的环境变量 MICRONAUT_ENVIRONMENTS=bar