我知道可以在要部署的EAR中嵌入的「beans.xml」文件中配置裝飾器。基於環境屬性啓用CDI裝飾器
問題是我對所有的環境使用相同的EAR,並且一組屬性或特定配置存儲在包之外的某個文件夾中。
我需要確定是否使用裝飾器「外部beans.xml」或某些類似的機制(EAR外部的東西)。
任何想法?
非常感謝。
我知道可以在要部署的EAR中嵌入的「beans.xml」文件中配置裝飾器。基於環境屬性啓用CDI裝飾器
問題是我對所有的環境使用相同的EAR,並且一組屬性或特定配置存儲在包之外的某個文件夾中。
我需要確定是否使用裝飾器「外部beans.xml」或某些類似的機制(EAR外部的東西)。
任何想法?
非常感謝。
通常情況下,這不起作用 - 啓用的標準手段爲每個歸檔方法的beans.xml
和全局啓用的@Priority
。沒有什麼像「external beans.xml」。
雖然有一種方法可以用擴展來啓用它。您需要設置一個擴展名並遵守AfterTypeDiscovery
event。從那裏你可以 利用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 = /路徑/到/附加/資源