我需要根据应用程序执行的环境(开发、测试、生产等)改变JDBC连接的注入方式。新环境的添加必须易于处理。因此,考虑到佩莱格里尼对以下问题的解决方案,我试图实施这种行为:
多个CDI配置文件(devel,beta,qa,生产)在一个战争?
注射点是这样的:
@Inject
private Connection conn;
我有两个连接工厂:
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; }
}
}
如果有任何建议,我将不胜感激。
我建议看一下deltaspike项目阶段特性。这似乎是一个很好的基础,为您的需要。
如何在运行时更改application.yaml的值?例如,我有一个服务器地址属性,希望在运行时更改
当使用JOOQ为SQLServer数据库生成代码时,生成会创建由三部分组成的限定符,如:。这正是我在使用SQL服务器数据库时想要的,但是当使用生成的代码与另一个数据库(如内存数据库中的H2)进行单元测试时,这是一个问题。 H2方言不支持这些由三部分组成的限定词,H2期望类似于[目录]。[表]。这会在针对H2执行以下命令时导致语法错误: 为了解决这个问题,我需要在运行时更改限定符,我认为可以使用渲染
问题内容: 我需要在运行时在应用程序中更改属性。例如,我有一项服务,该服务发送带有重置密码的电子邮件。要求有效期为12小时。但是我想在运行时将此时间更改为24或更多。我需要给管理员执行此操作的机会。 我的财产文件有 我的服务 我的Spring xml配置 我可以在运行时以某种方式更改此值吗? 问题答案: 只需远离xml配置,就快要到2017年了。 使用@Value,您将从属性文件中获取hours.
我有一个Jtable,它由一个值数组填充。我的代码如下: 我可以使用JButton从值数组填充Jtable。我想有一个条件,如果列为“百分比”,则获取该列中的所有值 我不想使用TableCellRenderComponent。我希望在单击Jbutton时执行此操作。 然后根据我想要得到的,前两行应该以红色突出显示。谢谢你的帮助。
问题内容: 在Dockerfile中,我有一个要安装的层: 当我构建Docker映像时, 无论 对该文件进行任何更改,它都会运行整个过程。 如何确保仅在文件发生更改的情况下运行Docker ? 问题答案: 我假设在构建过程中的某个时候,您正在使用或将整个应用程序复制到Docker映像中: 问题在于,每次将整个应用程序复制到映像时,您都会使Docker构建缓存无效。这还将使所有后续构建步骤的缓存无效
假设您有以下扩展处理器接口的类: 现在,假设您在Package1的配置类中定义了以下bean: 接下来,您在Package2的配置类中定义以下bean: 问题是Spring如何解决以下喷射: 如果其中一个bean被注释为@Primary呢?