繁体   English   中英

根据环境属性启用CDI装饰器

[英]Enabling CDI Decorator based on environmental properties

我知道可以在要部署的EAR中嵌入的“ beans.xml”文件中配置Decorators。

问题是我在所有环境中都使用相同的EAR,并且属性或特定配置集存储在软件包外部的某个文件夹中。

我需要确定是否使用Decorator,或者是否使用“ external beans.xml”或某种类似的机制(在EAR之外的某种东西)。

有任何想法吗?

非常感谢你。

通常,这是行不通的-启用的标准方法是针对每个归档方法的beans.xml和用于全局启用的@Priority 没有像“ external beans.xml”这样的东西。

尽管有一种方法可以通过extension启用它。 您需要设置扩展并观察AfterTypeDiscovery事件 从那里可以使用public List<Class<?>> getDecorators(); 它返回装饰器的MUTABLE列表-因此您可以将自己的装饰器添加到列表中(以Class的形式)。 那应该启用它。

您可以使用的另一种情况是利用构建时包含和处理。 如果您事先知道,哪些属性会在构建时激活特定的装饰器,那么您可以使用Maven资源以及系统属性来定义要过滤的其他资源,因此:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompant</groupId>
    <artifactId>my-project-id</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <some.kind.of.selector.properties>$basedir}/src/main/resources/development</some.kind.of.selector.properties>
    </properties>

    <build>
        <resources>
            <resource>
                <directory>${some.kind.of.selector.properties}</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>

    <profiles>
        <profile>
            <id>test</id>
            <properties>
                <some.kind.of.selector.properties>$basedir}/src/main/resources/test</some.kind.of.selector.properties>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <some.kind.of.selector.properties>$basedir}/src/main/resources/prod</some.kind.of.selector.properties>
            </properties>
        </profile>
    </profiles>
</project>

在构建时,可以为每个环境指定不同的beans.xml

mvn全新安装-Pprod

甚至直接指定属性

mvn全新安装-Dsome.kind.of.selector.properties = /路径/到/其他/资源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM