当前位置: 首页 > 面试题库 >

在一次战争中有多个CDI配置配置文件(开发,测试版,质量保证,生产)?

金泉
2023-03-14
问题内容

拥有使用Spring DI applicationContext.xml声明依赖项注入的方式的经验,我现在尝试弄清楚如何使用Java EE6
CDI进行相同的操作。

使用Spring,我可以将.jar附带几个配置文件,例如 unittest.xml,devel.xml,qa.xml,production.xml
,并使用命令行参数或环境变量激活它们。

随着CDI,我可以用@Alternative beans.xml文件 和属性的 web.xml中
,但似乎没有出货多的beans.xml不同环境的方式。

我不希望使用Maven配置文件/过滤器来生成4-6版本的应用程序,尽管我知道在某些情况下这将是更好的解决方案(例如,将现成的构建大战运送给客户-
但我仅在内部使用大战,因此让我们节省编译时间!)

最好是,我还能够从文件系统中加载那些配置文件,以便系统管理员可以编辑它们,而不必重新构建应用程序

具有多个依赖项和属性的配置集的Java EE6方法是什么?

如果没有,到2013年,推荐的替代方案是什么?使用Spring?接缝?帅哥 我看到了提到Apache
DeltaSpike的内容,但是从网页上看,它们仍然看起来像alpha。


问题答案:

我会使用动态生产者,使用Qualifier来标识所需的环境

// 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; }
     }

}

因此,此处容器根据系统属性“
deployenv”的决定将所有可用的Greeting实现注入到中GreetingFactory,而后者又用作@Producer预期的实现。



 类似资料:
  • 有了Spring DI ApplicationContext.xml声明依赖注入的经验,我现在试图找出如何在Java EE6 CDI中做同样的事情。 使用Spring,我可以将我的.jar附带几个配置概要文件,如unittest.xml、devel.xml、qa.xml、production.xml,并使用命令行参数或环境变量激活它们。 使用CDI,我可以在beans.xml中使用@alterna

  • 我有一个启动应用程序,部署到一个外部tomcat服务器,一切工作在我的本地与本地数据库。现在,我必须将代码推广到数据库配置不同的更高环境。我读了很多关于配置文件的etc...,但是当它是一个外部tomcat并且不使用

  • 1-我有一个带有Spring Boot的API,我需要配置两个DBMS(MySQL和Postgres)。 2-对于每个DBMS,我需要配置不同的配置文件。(Dev,Prod) 遵循我的MySQL配置类: 我以为我的出口是: 重要: 当我将配置文件配置为连接到我的MySQL Dev数据库时,我只想连接到它。我想要同样的结果,当它是MySQL的Prod的基础时。 当我将配置文件配置为连接到我的Post

  • 本文向大家介绍一次Webpack配置文件的分离实战记录,包括了一次Webpack配置文件的分离实战记录的使用技巧和注意事项,需要的朋友参考一下 前言 随着前端技术的发展,业务逻辑的增多及功能化的繁琐已经成为前端人员最烧脑的问题。前端自动化构建工具的出现,为前端人员带来了项目构建上的福音,成为每个前端工程师必回的技术栈,目前比较流行的Webpack以万物皆模块的思想构建我们的前端项目,同样也是笔者正

  • 我正在与: Spring Framework JUnit 分级 我有这两个测试类 null Spring Boot/JUnit,为多个配置文件运行所有单元测试 但是我希望避免通过或使用命令,它通过类保持控件。

  • 多文件配置 自版本4.23.0起,v2ray程序支持使用多个配置文件。 多配置文件的主要作用在于分散不同作用模块配置,便于管理和维护。该功能主要考虑是为了丰富v2ray生态链,比如对于GUI的客户端,一般只实现节点选择等固定的功能,对于太复杂的配置难以图形化实现;只需留一个confdir的自定义配置目录供配置复杂的功能;对于服务器的部署脚本,只需往confdir添加文件即可实现配置多种协议...等