From c7663abffe007062e33aff5f756c76aeb68dcb46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=97=E5=B0=91?= <314226532@qq.com> Date: Wed, 9 Jan 2019 20:56:55 +0800 Subject: [PATCH] add spring enviroment extension module --- .../env-extension/pom.xml | 35 +++++++++++ .../env/extension/ImportExtraConfig.java | 11 ++++ .../LoadExtraConfigApplicationListener.java | 62 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 2 + spring-cloud-alibaba-examples/pom.xml | 1 + .../sms-example/pom.xml | 5 ++ .../alibaba/cloud/example/SmsApplication.java | 61 ++++++++++++++---- .../cloud/example/env/SmsApplication.java | 30 +++++++++ 8 files changed, 194 insertions(+), 13 deletions(-) create mode 100644 spring-cloud-alibaba-examples/env-extension/pom.xml create mode 100644 spring-cloud-alibaba-examples/env-extension/src/main/java/org/springframework/alicloud/env/extension/ImportExtraConfig.java create mode 100644 spring-cloud-alibaba-examples/env-extension/src/main/java/org/springframework/alicloud/env/extension/LoadExtraConfigApplicationListener.java create mode 100644 spring-cloud-alibaba-examples/env-extension/src/main/resources/META-INF/spring.factories create mode 100644 spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/env/SmsApplication.java diff --git a/spring-cloud-alibaba-examples/env-extension/pom.xml b/spring-cloud-alibaba-examples/env-extension/pom.xml new file mode 100644 index 00000000..2ed8aefb --- /dev/null +++ b/spring-cloud-alibaba-examples/env-extension/pom.xml @@ -0,0 +1,35 @@ + + + + + org.springframework.cloud + spring-cloud-alibaba + 0.1.2.BUILD-SNAPSHOT + + + 4.0.0 + + alibaba.com + env-extension + jar + + env-extension + Demo project for Spring Boot + + + + org.springframework.cloud + spring-cloud-commons + + + org.springframework.cloud + spring-cloud-context + + + org.springframework.cloud + spring-cloud-starter + + + + diff --git a/spring-cloud-alibaba-examples/env-extension/src/main/java/org/springframework/alicloud/env/extension/ImportExtraConfig.java b/spring-cloud-alibaba-examples/env-extension/src/main/java/org/springframework/alicloud/env/extension/ImportExtraConfig.java new file mode 100644 index 00000000..494642de --- /dev/null +++ b/spring-cloud-alibaba-examples/env-extension/src/main/java/org/springframework/alicloud/env/extension/ImportExtraConfig.java @@ -0,0 +1,11 @@ +package org.springframework.alicloud.env.extension; + +import java.lang.annotation.*; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ImportExtraConfig { + + String[] name() default ""; +} diff --git a/spring-cloud-alibaba-examples/env-extension/src/main/java/org/springframework/alicloud/env/extension/LoadExtraConfigApplicationListener.java b/spring-cloud-alibaba-examples/env-extension/src/main/java/org/springframework/alicloud/env/extension/LoadExtraConfigApplicationListener.java new file mode 100644 index 00000000..684513c0 --- /dev/null +++ b/spring-cloud-alibaba-examples/env-extension/src/main/java/org/springframework/alicloud/env/extension/LoadExtraConfigApplicationListener.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.alicloud.env.extension; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.core.env.PropertiesPropertySource; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Properties; + +/** + * @author pbting + * @date 2019-01-09 7:39 PM + */ +public class LoadExtraConfigApplicationListener + implements ApplicationListener { + + @Override + public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { + SpringApplication springApplication = event.getSpringApplication(); + Class clazz = springApplication.getMainApplicationClass(); + if (!clazz.isAnnotationPresent(ImportExtraConfig.class)) { + return; + } + ImportExtraConfig annotation = (ImportExtraConfig) clazz + .getAnnotation(ImportExtraConfig.class); + + String[] extraConfig = annotation.name(); + + if (extraConfig == null || extraConfig.length == 0) { + return; + } + + for (String config : extraConfig) { + try { + Properties properties = new Properties(); + properties.load(new FileInputStream(config)); + event.getEnvironment().getPropertySources() + .addFirst(new PropertiesPropertySource(config, properties)); + } + catch (IOException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/env-extension/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-examples/env-extension/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..d264a372 --- /dev/null +++ b/spring-cloud-alibaba-examples/env-extension/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.context.ApplicationListener=\ + org.springframework.alicloud.env.extension.LoadExtraConfigApplicationListener \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/pom.xml b/spring-cloud-alibaba-examples/pom.xml index 0eca5b82..451e8c61 100644 --- a/spring-cloud-alibaba-examples/pom.xml +++ b/spring-cloud-alibaba-examples/pom.xml @@ -28,6 +28,7 @@ ans-example/ans-provider-example acm-example/acm-local-example rocketmq-example + env-extension sms-example spring-cloud-bus-rocketmq-example schedulerx-example/schedulerx-simple-task-example diff --git a/spring-cloud-alibaba-examples/sms-example/pom.xml b/spring-cloud-alibaba-examples/sms-example/pom.xml index c10808ff..dce6083e 100644 --- a/spring-cloud-alibaba-examples/sms-example/pom.xml +++ b/spring-cloud-alibaba-examples/sms-example/pom.xml @@ -31,6 +31,11 @@ org.springframework.cloud spring-cloud-starter-alicloud-sms + + alibaba.com + env-extension + 0.1.2.BUILD-SNAPSHOT + com.google.code.gson gson diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java b/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java index 087ab0b0..4a31106e 100644 --- a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java +++ b/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java @@ -1,13 +1,48 @@ -package org.springframework.cloud.alibaba.cloud.example; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class SmsApplication { - - public static void main(String[] args) { - - SpringApplication.run(SmsApplication.class, args); - } -} \ No newline at end of file +//package org.springframework.cloud.alibaba.cloud.example; +// +//import org.springframework.alicloud.env.extension.ImportExtraConfig; +//import org.springframework.boot.SpringApplication; +//import org.springframework.boot.SpringApplicationRunListener; +//import org.springframework.boot.autoconfigure.SpringBootApplication; +//import org.springframework.context.ConfigurableApplicationContext; +//import org.springframework.core.env.ConfigurableEnvironment; +// +//@SpringBootApplication +//@ImportExtraConfig(name = "/Users/toava/sms.properties") +//public class SmsApplication { +// +// public static void main(String[] args) { +// +// SpringApplication.run(SmsApplication.class, args); +// } +// +// public class EvnExtra implements SpringApplicationRunListener { +// @Override +// public void starting() { +// +// } +// +// @Override +// public void environmentPrepared(ConfigurableEnvironment environment) { +// +// } +// +// @Override +// public void contextPrepared(ConfigurableApplicationContext context) { +// +// } +// +// @Override +// public void contextLoaded(ConfigurableApplicationContext context) { +// +// } +// +// @Override +// public void finished(ConfigurableApplicationContext context, +// Throwable exception) { +// String ak = context.getEnvironment() +// .getProperty("spring.cloud.alicloud.access-key"); +// System.err.println(ak); +// } +// } +//} \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/env/SmsApplication.java b/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/env/SmsApplication.java new file mode 100644 index 00000000..33ceeb3b --- /dev/null +++ b/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/env/SmsApplication.java @@ -0,0 +1,30 @@ +package org.springframework.cloud.alibaba.cloud.example.env; + +import org.springframework.alicloud.env.extension.ImportExtraConfig; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@ImportExtraConfig(name = "/Users/toava/sms.properties") +public class SmsApplication { + + public static void main(String[] args) { + + SpringApplication.run(SmsApplication.class, args); + } + + @RestController + public class EnvExtraController{ + + @Value("${spring.cloud.alicloud.access-key:deshao}") + private String ak; + + @GetMapping("/get-ak.do") + public String getAk(){ + return ak; + } + } +} \ No newline at end of file