簡體   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