2016-09-20 64 views
0

我知道可以在要部署的EAR中嵌入的「beans.xml」文件中配置裝飾器。基於環境屬性啓用CDI裝飾器

問題是我對所有的環境使用相同的EAR,並且一組屬性或特定配置存儲在包之外的某個文件夾中。

我需要確定是否使用裝飾器「外部beans.xml」或某些類似的機制(EAR外部的東西)。

任何想法?

非常感謝。

回答

1

通常情況下,這不起作用 - 啓用的標準手段爲每個歸檔方法的beans.xml和全局啓用的@Priority。沒有什麼像「external beans.xml」。

雖然有一種方法可以用擴展來啓用它。您需要設置一個擴展名並遵守AfterTypeDiscovery event。從那裏你可以 利用public List<Class<?>> getDecorators();其中返回MUTABLE裝飾列表 - 所以你可以添加自己的列表(以Class的形式)。這應該可以實現。

1

您可以使用的另一種方案是利用構建時包含和處理。 如果你事先知道哪些屬性在編譯時激活特定的裝飾,那麼你可以使用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 = /路徑/到/附加/資源