gpt4 book ai didi

Java CDI : How to change producers at runtime using qualifiers with multiple values?

转载 作者:行者123 更新时间:2023-12-02 04:27:35 25 4
gpt4 key购买 nike

我需要根据应用程序执行的环境(开发、测试、生产等)更改 JDBC 连接的注入(inject)方式。添加新环境必须能够轻松处理。因此,考虑到 Pellegrini 对以下问题的解决方案,我尝试实现这种行为:

Multiple CDI configuration profiles (devel, beta, qa, production) in one war?

但是,我的背景有点不同。让我们看看:

注入(inject)点是这样的:

@Inject 
private Connection conn;

我有两个连接工厂:

  1. ConnectionFactory:用于测试、验收和生产环境;
  2. ProxyConnectionFactory:仅适用于开发环境。

它们的定义如下:

public inteface ConnectionFactory {
public Connection getConnection();
}

@Environment({ "test", "acceptance", "production" })
public CustomConnectionFactory implements ConnectionFactory {
public Connection getConnection() {
// Implementation code
}
}

@Environment({ "development" })
public ProxyCustomConnectionFactory implements ConnectionFactory {
public Connection getConnection() {
// Implementation code
}
}

@Qualifier
@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
public @interface Environment {
String[] value() default {"production"};
}

最后,我的生产者代码使用之前的工厂之一为每个预期环境生成适当的连接:

public class ConnectionProducer {

@Inject
@Any
Instance<ConnectionFacotry> connectionFactories;

public String getEnvironment(){
return System.getProperty("deploy-environment");
}

@Produces
public Connection produceConnection(){

String[] profile = {getEnvironment().toLowerCase()};

Instance<ConnectionFactory> found = connectionFactories.select(
new EnvironmentQualifier(profile));
if (!found.isUnsatisfied() && !found.isAmbiguous()){
return found.get();
}
throw new RuntimeException("Error ...");
}

public static class EnvironmentQualifier
extends AnnotationLiteral<Environment>
implements Environment {
private String[] value;
public EnvironmentQualifier(String[] value) {
this.value=value;
}
public String[] value() { return value; }
}

}

此代码引发运行时错误,因为指令 found.isAmbigously() 的计算结果为 true。我不确定,但我认为出现此问题是因为环境限定符接受多个值。我做错了什么?

如果有任何建议,我将不胜感激。

最佳答案

我建议看看deltaspike project stage feature 。这似乎是满足您需求的良好基础。

关于Java CDI : How to change producers at runtime using qualifiers with multiple values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com