有了Spring DI ApplicationContext.xml声明依赖注入的经验,我现在试图找出如何在Java EE6 CDI中做同样的事情。
使用Spring,我可以将我的.jar附带几个配置概要文件,如unittest.xml、devel.xml、qa.xml、production.xml,并使用命令行参数或环境变量激活它们。
使用CDI,我可以在beans.xml中使用@alternative和在web.xml中使用properties,但是似乎没有办法为不同的环境提供多个beans.xml。
我不想使用Maven配置文件/过滤器来生成4-6个版本的应用程序,尽管我明白对于某些场景来说,这将是更好的解决方案(即向客户发送准备好的构建WAR--但我只在内部使用wars,所以让我们节省编译时间!)
最好,我还可以从文件系统加载这些配置文件,这样系统管理员就可以编辑它们,而不必重新构建应用程序。
Java EE6拥有多个依赖项和属性配置集的方式是什么?
如果没有,截至2013年有哪些建议的替代方案?用Spring?接缝?盖斯?我看到了Apache DeltaSpike的提及,但从网页上看,它们似乎仍然是阿尔法·朱克。
我会使用动态生成器,使用限定符
来标识所需的环境
// The qualifier for the production/qa/unit test
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD,
ElementType.FIELD, ElementType.PARAMETER})
public @interface Stage {
String value() default "production";
}
// The interface for the stage-dependant service
public interface Greeting{
public String sayHello();
}
// The production service
@Stage("production")
public class ProductionGreeting implements Greeting{
public String sayHello(){return "Hello customer"; }
}
// The QA service
@Stage("qa")
public class QAGreeting implements Greeting{
public String sayHello(){return "Hello tester"; }
}
// The common code wich uses the service
@Stateless
public class Salutation{
@Inject Greeting greeting;
public String sayHello(){ return greeting.sayHello(); };
}
// The dynamic producer
public class GreetingFactory{
@Inject
@Any
Instance<Greeting> greetings;
public String getEnvironment(){
return System.getProperty("deployenv");
}
@Produces
public Greeting getGreeting(){
Instance<Greeting> found=greetings.select(
new StageQualifier(getEnvironment()));
if (!found.isUnsatisfied() && !found.isAmbiguous()){
return found.get();
}
throw new RuntimeException("Error ...");
}
public static class StageQualifier
extends AnnotationLiteral<Stage>
implements Stage {
private String value;
public StageQualifier(String value){
this.value=value;
}
public String value() { return value; }
}
}
因此,容器在这里将所有可用的greeting
实现注入到greetingFactory
中,该实现又作为预期实现的@producer
,并根据系统属性'deployenv'进行决策。
问题内容: 拥有使用Spring DI applicationContext.xml声明依赖项注入的方式的经验,我现在尝试弄清楚如何使用Java EE6 CDI进行相同的操作。 使用Spring,我可以将.jar附带几个配置文件,例如 unittest.xml,devel.xml,qa.xml,production.xml ,并使用命令行参数或环境变量激活它们。 随着CDI,我可以用@Altern
1-我有一个带有Spring Boot的API,我需要配置两个DBMS(MySQL和Postgres)。 2-对于每个DBMS,我需要配置不同的配置文件。(Dev,Prod) 遵循我的MySQL配置类: 我以为我的出口是: 重要: 当我将配置文件配置为连接到我的MySQL Dev数据库时,我只想连接到它。我想要同样的结果,当它是MySQL的Prod的基础时。 当我将配置文件配置为连接到我的Post
我有两个配置文件(“autoContido”和“weblogic”),其中每个配置文件都有两个配置类,因为我使用的是两个数据源。 我已经将特定数据源中的bean注释为@Primary,而另一个数据源配置类中的bean不是@Primary,但我对它们的命名不同。 我以为使用@主注释就不会有像下面这样的错误,但我仍然得到它们。有人能帮我看看问题出在哪里吗? 我尝试使用@Primary annotati
寻找在Springboot应用程序中配置多个配置文件特定属性文件的最佳方法。下面是一个例子: -资源 · --application.properties · · · · · --德夫 --application-dev.properties --ldap-dev.properties --Quartz-Dev.Prope
我们使用的是Spring boot。我们有三个环境、、。我们当前的配置结构 开发 同样,对于每个环境,我们都有一个yml和属性文件。经过一年的开发,现在配置文件的单个yml文件变成了一个大型单片配置文件。 对于下面这样的配置文件,可以有多个配置文件吗?
我正在用Java 11和Maven创建一个测试框架,并且我已经为单独的测试构建了两个不同的运行程序。我只想运行一个配置文件,但它一直运行两个配置文件。以下是我的个人资料: