add OnlyPodsEnvironment 注解

This commit is contained in:
xiajiafu 2022-08-17 15:09:16 +08:00
parent c17c99ae4d
commit 82aed6bfa4
3 changed files with 216 additions and 148 deletions

View File

@ -7,7 +7,7 @@
<groupId>cn.axzo.framework</groupId>
<artifactId>common-common</artifactId>
<!-- release -->
<version>1.1.7</version>
<version>1.1.9</version>
<!-- snapshot -->
<!-- <version>1.0.0-SNAPSHOT</version>-->
@ -24,156 +24,156 @@
<slf4j-api.version>1.7.5</slf4j-api.version>
<mybatis-plus.version>3.3.2</mybatis-plus.version>
<lombok.version>1.18.18</lombok.version>
<fastjson.version>1.2.47</fastjson.version>
<hutool-all.version>5.5.7</hutool-all.version>
<jackson-databind.version>2.10.2</jackson-databind.version>
<apm-toolkit-trace.version>6.5.0</apm-toolkit-trace.version>
<javax.servlet-api.version>3.0.1</javax.servlet-api.version>
<spring.version>4.3.19.RELEASE</spring.version>
<javax.validation.version>2.0.0.Final</javax.validation.version>
<hibernate.validator.version>6.0.16.Final</hibernate.validator.version>
<fastjson.version>1.2.47</fastjson.version>
<hutool-all.version>5.5.7</hutool-all.version>
<jackson-databind.version>2.10.2</jackson-databind.version>
<apm-toolkit-trace.version>6.5.0</apm-toolkit-trace.version>
<javax.servlet-api.version>3.0.1</javax.servlet-api.version>
<spring.version>4.3.19.RELEASE</spring.version>
<javax.validation.version>2.0.0.Final</javax.validation.version>
<hibernate.validator.version>6.0.16.Final</hibernate.validator.version>
</properties>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>${aopalliance.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-all.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>${mybatis-plus.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback-core.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${apm-toolkit-trace.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>${aopalliance.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-all.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>${mybatis-plus.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback-core.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${apm-toolkit-trace.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<!-- 两个ID必须与 setting.xml中的<server><id>Releases</id></server>保持一致 -->
<repository>
<id>rdc-releases</id>
<name>Nexus Release Repository</name>
<url>https://packages.aliyun.com/maven/repository/2005773-release-XI7cl5/</url>
</repository>
<snapshotRepository>
<id>rdc-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>https://packages.aliyun.com/maven/repository/2005773-snapshot-V5Gjdf/</url>
</snapshotRepository>
</distributionManagement>
<distributionManagement>
<!-- 两个ID必须与 setting.xml中的<server><id>Releases</id></server>保持一致 -->
<repository>
<id>rdc-releases</id>
<name>Nexus Release Repository</name>
<url>https://packages.aliyun.com/maven/repository/2005773-release-XI7cl5/</url>
</repository>
<snapshotRepository>
<id>rdc-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>https://packages.aliyun.com/maven/repository/2005773-snapshot-V5Gjdf/</url>
</snapshotRepository>
</distributionManagement>
</project>

View File

@ -0,0 +1,29 @@
package cn.azxo.framework.common.annotation;
import cn.azxo.framework.common.spring.condition.PodsEnvironmentCondition;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Conditional;
/**
* 只对容器环境生效可用于区分本地开发环境和容器环境(rancher metadata.namespace)
*
* @author xiajiafu
* @since 2022/8/17
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(PodsEnvironmentCondition.class)
public @interface OnlyPodsEnvironment {
/**
* 对指定容器命名空间(rancher metadata.namespace)生效默认对所有命名空间生效
* <p> optional value java-dev/test/test1/pre/uat/pro
*/
String[] value() default "";
}

View File

@ -0,0 +1,39 @@
package cn.azxo.framework.common.spring.condition;
import cn.azxo.framework.common.annotation.OnlyPodsEnvironment;
import java.util.Arrays;
import java.util.Map;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.util.MultiValueMap;
/**
* 判断当前环境是否是容器环境
*
* @author xiajiafu
* @since 2022/8/17
*/
public class PodsEnvironmentCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Map<String, String> env = System.getenv();
if (env != null) {
String podNamespace = env.get("MY_POD_NAMESPACE");
// 为空说明非容器环境
if (podNamespace == null || "".equals(podNamespace)) {
return false;
}
MultiValueMap<String, Object> attrs = metadata.getAllAnnotationAttributes(OnlyPodsEnvironment.class.getName());
if (attrs != null) {
for (Object value : attrs.get("value")) {
return Arrays.stream((String[]) value).anyMatch(o -> "".equals(o) || o.equals(podNamespace));
}
return false;
}
}
return false;
}
}