From 96efd8ffe2411207d95f40ac1ad85d9d32105301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=87=E6=AD=A6?= Date: Thu, 26 Apr 2018 15:00:18 +0800 Subject: [PATCH 0001/1104] =?UTF-8?q?=E4=BC=98=E5=8C=96Properties#stringPr?= =?UTF-8?q?opertyNames=E5=A4=84=E7=90=86=EF=BC=8Cjdk9=E4=BB=A5=E4=B8=8B?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=AD=A4=E6=96=B9=E6=B3=95cpu=E6=B6=88?= =?UTF-8?q?=E8=80=97=E7=9B=B8=E5=AF=B9=E8=BF=87=E5=A4=A7.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apollo/internals/DefaultConfig.java | 16 ++++++++- .../apollo/internals/DefaultConfigTest.java | 35 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/DefaultConfig.java b/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/DefaultConfig.java index 0d28ad012f4..f6cdd8afddf 100644 --- a/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/DefaultConfig.java +++ b/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/DefaultConfig.java @@ -8,6 +8,7 @@ import java.util.Objects; import java.util.Properties; import java.util.Set; +import java.util.HashMap; import java.util.concurrent.atomic.AtomicReference; import org.slf4j.Logger; @@ -101,7 +102,20 @@ public Set getPropertyNames() { return Collections.emptySet(); } - return properties.stringPropertyNames(); + return stringPropertyNames(properties); + } + + private Set stringPropertyNames(Properties properties) { + //jdk9以下版本Properties#enumerateStringProperties方法存在性能问题,keys() + get(k) 重复迭代, jdk9之后改为entrySet遍历. + Map h = new HashMap<>(); + for (Map.Entry e : properties.entrySet()) { + Object k = e.getKey(); + Object v = e.getValue(); + if (k instanceof String && v instanceof String) { + h.put((String) k, (String) v); + } + } + return h.keySet(); } @Override diff --git a/apollo-client/src/test/java/com/ctrip/framework/apollo/internals/DefaultConfigTest.java b/apollo-client/src/test/java/com/ctrip/framework/apollo/internals/DefaultConfigTest.java index a82a04fc892..19b7ab75ca3 100644 --- a/apollo-client/src/test/java/com/ctrip/framework/apollo/internals/DefaultConfigTest.java +++ b/apollo-client/src/test/java/com/ctrip/framework/apollo/internals/DefaultConfigTest.java @@ -11,6 +11,8 @@ import java.util.Calendar; import java.util.Date; import java.util.Properties; +import java.util.Set; +import java.util.Collections; import java.util.concurrent.TimeUnit; import org.junit.After; @@ -645,6 +647,39 @@ public void onChange(ConfigChangeEvent changeEvent) { assertEquals(PropertyChangeType.ADDED, newKeyChange.getChangeType()); } + @Test + public void testGetPropertyNames() { + String someKeyPrefix = "someKey"; + String someValuePrefix = "someValue"; + + //set up config repo + someProperties = new Properties(); + for (int i = 0; i < 10; i++) { + someProperties.setProperty(someKeyPrefix + i, someValuePrefix + i); + } + + when(configRepository.getConfig()).thenReturn(someProperties); + + DefaultConfig defaultConfig = + new DefaultConfig(someNamespace, configRepository); + + Set propertyNames = defaultConfig.getPropertyNames(); + + assertEquals(10, propertyNames.size()); + assertEquals(someProperties.stringPropertyNames(), propertyNames); + } + + @Test + public void testGetPropertyNamesWithNullProp() { + when(configRepository.getConfig()).thenReturn(null); + + DefaultConfig defaultConfig = + new DefaultConfig(someNamespace, configRepository); + + Set propertyNames = defaultConfig.getPropertyNames(); + assertEquals(Collections.emptySet(), propertyNames); + } + private void checkDatePropertyWithFormat(Config config, Date expected, String propertyName, String format, Date defaultValue) { assertEquals(expected, config.getDateProperty(propertyName, format, defaultValue)); From 9ba2c877553992f8295f7222c3d2ffae09e3179c Mon Sep 17 00:00:00 2001 From: Jason Song Date: Sat, 5 May 2018 20:24:24 +0800 Subject: [PATCH 0002/1104] Create CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..e8d45a6b556 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at apollo-config@googlegroups.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ From 5df16b82658cbd5aaefb1a53d3ea66e32980489e Mon Sep 17 00:00:00 2001 From: Jason Song Date: Sat, 5 May 2018 20:32:46 +0800 Subject: [PATCH 0003/1104] Create CONTRIBUTING.md --- CONTRIBUTING.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..cff3f6effef --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,25 @@ +## Contributing to apollo + +Apollo is released under the non-restrictive Apache 2.0 license, and follows a very standard Github development process, using Github tracker for issues and merging pull requests into master. If you want to contribute even something trivial please do not hesitate, but follow the guidelines below. + +### Sign the Contributor License Agreement + +Before we accept a non-trivial patch or pull request we will need you to sign the Contributor License Agreement. Signing the contributor’s agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do. Active contributors might be asked to join the core team, and given the ability to merge pull requests. + +### Code Conventions + +Our code style is in line with [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html). + +We provide template files [intellij-java-google-style.xml](https://github.com/ctripcorp/apollo/blob/master/apollo-buildtools/style/intellij-java-google-style.xml) for IntelliJ IDEA and [eclipse-java-google-style.xml](https://github.com/ctripcorp/apollo/blob/master/apollo-buildtools/style/eclipse-java-google-style.xml) for Eclipse. If you use other IDEs, then you may config manually by referencing the template files. + +* Make sure all new .java files have a simple Javadoc class comment with at least an `@author` tag identifying you, and preferably at least a paragraph on what the class is for. + +* Add yourself as an @author to the .java files that you modify substantially (more than cosmetic changes). + +* Add some Javadocs and, if you change the namespace, some XSD doc elements. + +* A few unit tests should be added for a new feature or an important bug fix. + +* If no-one else is using your branch, please rebase it against the current master (or other target branch in the main project). + +* When writing a commit message please follow these conventions: if you are fixing an existing issue, please add Fixes #XXX at the end of the commit message (where XXX is the issue number). From cb1ec3378b8ce243188d7cd0e282176301038b50 Mon Sep 17 00:00:00 2001 From: nobodyiam Date: Sat, 5 May 2018 21:45:44 +0800 Subject: [PATCH 0004/1104] reduce test logs --- apollo-adminservice/src/test/resources/application.properties | 2 +- apollo-adminservice/src/test/resources/logback-test.xml | 4 ++-- apollo-assembly/src/test/resources/application.properties | 2 +- apollo-assembly/src/test/resources/logback-test.xml | 4 ++-- apollo-biz/src/test/resources/application.properties | 2 +- apollo-biz/src/test/resources/logback-test.xml | 4 ++-- apollo-client/src/test/resources/log4j2.xml | 2 +- .../src/test/resources/application.properties | 2 +- apollo-configservice/src/test/resources/logback-test.xml | 4 ++-- apollo-core/src/test/resources/log4j2.xml | 2 +- apollo-portal/src/test/resources/application.properties | 2 +- apollo-portal/src/test/resources/logback-test.xml | 4 ++-- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apollo-adminservice/src/test/resources/application.properties b/apollo-adminservice/src/test/resources/application.properties index 89fbc7969a0..933c471c273 100644 --- a/apollo-adminservice/src/test/resources/application.properties +++ b/apollo-adminservice/src/test/resources/application.properties @@ -1,6 +1,6 @@ spring.datasource.url = jdbc:h2:mem:~/apolloconfigdb;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1 spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy -spring.jpa.properties.hibernate.show_sql=true +spring.jpa.properties.hibernate.show_sql=false spring.h2.console.enabled = true spring.h2.console.settings.web-allow-others=true diff --git a/apollo-adminservice/src/test/resources/logback-test.xml b/apollo-adminservice/src/test/resources/logback-test.xml index 9d289de3bb8..7e6f135fdf8 100644 --- a/apollo-adminservice/src/test/resources/logback-test.xml +++ b/apollo-adminservice/src/test/resources/logback-test.xml @@ -8,8 +8,8 @@ - + - \ No newline at end of file + diff --git a/apollo-assembly/src/test/resources/application.properties b/apollo-assembly/src/test/resources/application.properties index a6fb47bc465..77babe92678 100644 --- a/apollo-assembly/src/test/resources/application.properties +++ b/apollo-assembly/src/test/resources/application.properties @@ -1,6 +1,6 @@ spring.datasource.url = jdbc:h2:mem:~/apolloconfigdb;mode=mysql;DB_CLOSE_ON_EXIT=FALSE spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy -spring.jpa.properties.hibernate.show_sql=true +spring.jpa.properties.hibernate.show_sql=false spring.h2.console.enabled = true spring.h2.console.settings.web-allow-others=true apollo.portal.env= local diff --git a/apollo-assembly/src/test/resources/logback-test.xml b/apollo-assembly/src/test/resources/logback-test.xml index 9d289de3bb8..7e6f135fdf8 100644 --- a/apollo-assembly/src/test/resources/logback-test.xml +++ b/apollo-assembly/src/test/resources/logback-test.xml @@ -8,8 +8,8 @@ - + - \ No newline at end of file + diff --git a/apollo-biz/src/test/resources/application.properties b/apollo-biz/src/test/resources/application.properties index 6366863e51b..5ff43f53231 100644 --- a/apollo-biz/src/test/resources/application.properties +++ b/apollo-biz/src/test/resources/application.properties @@ -1,6 +1,6 @@ spring.datasource.url = jdbc:h2:mem:~/apolloconfigdb;mode=mysql;DB_CLOSE_ON_EXIT=FALSE spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy -spring.jpa.properties.hibernate.show_sql=true +spring.jpa.properties.hibernate.show_sql=false spring.h2.console.enabled = true spring.h2.console.settings.web-allow-others=true diff --git a/apollo-biz/src/test/resources/logback-test.xml b/apollo-biz/src/test/resources/logback-test.xml index 9d289de3bb8..7e6f135fdf8 100644 --- a/apollo-biz/src/test/resources/logback-test.xml +++ b/apollo-biz/src/test/resources/logback-test.xml @@ -8,8 +8,8 @@ - + - \ No newline at end of file + diff --git a/apollo-client/src/test/resources/log4j2.xml b/apollo-client/src/test/resources/log4j2.xml index 14181f27b67..761a3250c6b 100644 --- a/apollo-client/src/test/resources/log4j2.xml +++ b/apollo-client/src/test/resources/log4j2.xml @@ -10,7 +10,7 @@ - + diff --git a/apollo-configservice/src/test/resources/application.properties b/apollo-configservice/src/test/resources/application.properties index 3fad69d2ebc..494e5106acd 100644 --- a/apollo-configservice/src/test/resources/application.properties +++ b/apollo-configservice/src/test/resources/application.properties @@ -2,7 +2,7 @@ spring.datasource.url = jdbc:h2:mem:~/apolloconfigdb;mode=mysql;DB_CLOSE_ON_EXIT spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy spring.h2.console.enabled = true spring.h2.console.settings.web-allow-others=true -spring.jpa.properties.hibernate.show_sql=true +spring.jpa.properties.hibernate.show_sql=false # for ReleaseMessageScanner test apollo.message-scan.interval=100 diff --git a/apollo-configservice/src/test/resources/logback-test.xml b/apollo-configservice/src/test/resources/logback-test.xml index 9d289de3bb8..7e6f135fdf8 100644 --- a/apollo-configservice/src/test/resources/logback-test.xml +++ b/apollo-configservice/src/test/resources/logback-test.xml @@ -8,8 +8,8 @@ - + - \ No newline at end of file + diff --git a/apollo-core/src/test/resources/log4j2.xml b/apollo-core/src/test/resources/log4j2.xml index 14181f27b67..761a3250c6b 100644 --- a/apollo-core/src/test/resources/log4j2.xml +++ b/apollo-core/src/test/resources/log4j2.xml @@ -10,7 +10,7 @@ - + diff --git a/apollo-portal/src/test/resources/application.properties b/apollo-portal/src/test/resources/application.properties index a55f0e636fa..fc0a20ba0dc 100644 --- a/apollo-portal/src/test/resources/application.properties +++ b/apollo-portal/src/test/resources/application.properties @@ -1,5 +1,5 @@ spring.datasource.url = jdbc:h2:mem:~/apolloportaldb;mode=mysql;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1 spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy -spring.jpa.properties.hibernate.show_sql=true +spring.jpa.properties.hibernate.show_sql=false spring.h2.console.enabled = true spring.h2.console.settings.web-allow-others=true diff --git a/apollo-portal/src/test/resources/logback-test.xml b/apollo-portal/src/test/resources/logback-test.xml index 9d289de3bb8..7e6f135fdf8 100644 --- a/apollo-portal/src/test/resources/logback-test.xml +++ b/apollo-portal/src/test/resources/logback-test.xml @@ -8,8 +8,8 @@ - + - \ No newline at end of file + From bcea21a6a2a97c8e6ee6921774dedd1dc287803d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=87=E6=AD=A6?= Date: Mon, 7 May 2018 19:39:14 +0800 Subject: [PATCH 0005/1104] code clean:remove unused import. --- .../framework/apollo/biz/repository/NamespaceRepository.java | 1 - .../apollo/biz/repository/ReleaseHistoryRepository.java | 2 -- .../ctrip/framework/apollo/internals/AbstractConfigFile.java | 1 - .../framework/apollo/internals/RemoteConfigLongPollService.java | 1 - .../apollo/spring/annotation/ApolloJsonValueProcessor.java | 2 -- .../apollo/spring/annotation/SpringValueProcessor.java | 1 - .../apollo/spring/boot/ApolloApplicationContextInitializer.java | 1 - .../apollo/spring/property/AutoUpdateConfigChangeListener.java | 2 -- .../configservice/service/config/AbstractConfigService.java | 1 - .../apollo/configservice/wrapper/DeferredResultWrapper.java | 1 - .../demo/spring/javaConfigDemo/AnnotationApplication.java | 1 - .../ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java | 1 - .../com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java | 1 - .../apollo/portal/component/AdminServiceAddressLocator.java | 2 -- .../framework/apollo/portal/service/AppNamespaceService.java | 1 - .../java/com/ctrip/framework/apollo/portal/spi/UserService.java | 1 - 16 files changed, 20 deletions(-) diff --git a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java index 6ddeece61d5..469001e966e 100644 --- a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java +++ b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java @@ -2,7 +2,6 @@ import com.ctrip.framework.apollo.biz.entity.Namespace; -import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; diff --git a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ReleaseHistoryRepository.java b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ReleaseHistoryRepository.java index 0225e18e6da..4fc8cb0a382 100644 --- a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ReleaseHistoryRepository.java +++ b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/ReleaseHistoryRepository.java @@ -8,8 +8,6 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; -import java.util.List; - /** * @author Jason Song(song_s@ctrip.com) */ diff --git a/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/AbstractConfigFile.java b/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/AbstractConfigFile.java index 7867a7908a3..b00c6873e57 100644 --- a/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/AbstractConfigFile.java +++ b/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/AbstractConfigFile.java @@ -1,7 +1,6 @@ package com.ctrip.framework.apollo.internals; import java.util.List; -import java.util.Objects; import java.util.Properties; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/RemoteConfigLongPollService.java b/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/RemoteConfigLongPollService.java index 220f76f000d..e330e2f4b45 100644 --- a/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/RemoteConfigLongPollService.java +++ b/apollo-client/src/main/java/com/ctrip/framework/apollo/internals/RemoteConfigLongPollService.java @@ -3,7 +3,6 @@ import com.google.common.base.Joiner; import com.google.common.base.Strings; import com.google.common.collect.HashMultimap; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; diff --git a/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/ApolloJsonValueProcessor.java b/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/ApolloJsonValueProcessor.java index c64f14560a5..e04bf2d1c2d 100644 --- a/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/ApolloJsonValueProcessor.java +++ b/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/ApolloJsonValueProcessor.java @@ -1,7 +1,6 @@ package com.ctrip.framework.apollo.spring.annotation; import com.ctrip.framework.apollo.build.ApolloInjector; -import com.ctrip.framework.apollo.spring.property.AutoUpdateConfigChangeListener; import com.ctrip.framework.apollo.spring.property.PlaceholderHelper; import com.ctrip.framework.apollo.spring.property.SpringValue; import com.ctrip.framework.apollo.spring.property.SpringValueRegistry; @@ -9,7 +8,6 @@ import com.ctrip.framework.apollo.util.ConfigUtil; import com.google.common.base.Preconditions; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Type; diff --git a/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/SpringValueProcessor.java b/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/SpringValueProcessor.java index 2bf007d06a6..bc6d8b7f33b 100644 --- a/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/SpringValueProcessor.java +++ b/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/annotation/SpringValueProcessor.java @@ -1,7 +1,6 @@ package com.ctrip.framework.apollo.spring.annotation; import com.ctrip.framework.apollo.build.ApolloInjector; -import com.ctrip.framework.apollo.spring.property.AutoUpdateConfigChangeListener; import com.ctrip.framework.apollo.spring.property.PlaceholderHelper; import com.ctrip.framework.apollo.spring.property.SpringValue; import com.ctrip.framework.apollo.spring.property.SpringValueDefinition; diff --git a/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java b/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java index c9d2ea64f8f..3efb59772f6 100644 --- a/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java +++ b/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java @@ -2,7 +2,6 @@ import com.ctrip.framework.apollo.Config; import com.ctrip.framework.apollo.ConfigService; -import com.ctrip.framework.apollo.build.ApolloInjector; import com.ctrip.framework.apollo.core.ConfigConsts; import com.ctrip.framework.apollo.spring.config.ConfigPropertySourceFactory; import com.ctrip.framework.apollo.spring.config.PropertySourcesConstants; diff --git a/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/property/AutoUpdateConfigChangeListener.java b/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/property/AutoUpdateConfigChangeListener.java index 06c4463eb14..e10ef172006 100644 --- a/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/property/AutoUpdateConfigChangeListener.java +++ b/apollo-client/src/main/java/com/ctrip/framework/apollo/spring/property/AutoUpdateConfigChangeListener.java @@ -1,11 +1,9 @@ package com.ctrip.framework.apollo.spring.property; import com.ctrip.framework.apollo.ConfigChangeListener; -import com.ctrip.framework.apollo.build.ApolloInjector; import com.ctrip.framework.apollo.enums.PropertyChangeType; import com.ctrip.framework.apollo.model.ConfigChange; import com.ctrip.framework.apollo.model.ConfigChangeEvent; -import com.ctrip.framework.apollo.spring.annotation.SpringValueProcessor; import com.ctrip.framework.apollo.spring.util.SpringInjector; import com.google.gson.Gson; import java.lang.reflect.Field; diff --git a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/config/AbstractConfigService.java b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/config/AbstractConfigService.java index d6bc1a3756d..0082ceec82e 100644 --- a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/config/AbstractConfigService.java +++ b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/config/AbstractConfigService.java @@ -7,7 +7,6 @@ import com.google.common.base.Strings; -import java.util.Map; import java.util.Objects; import org.springframework.beans.factory.annotation.Autowired; diff --git a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/wrapper/DeferredResultWrapper.java b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/wrapper/DeferredResultWrapper.java index 368100df78c..d03203983d9 100644 --- a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/wrapper/DeferredResultWrapper.java +++ b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/wrapper/DeferredResultWrapper.java @@ -3,7 +3,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.ctrip.framework.apollo.core.dto.ApolloConfig; import com.ctrip.framework.apollo.core.dto.ApolloConfigNotification; import org.springframework.http.HttpStatus; diff --git a/apollo-demo/src/main/java/com/ctrip/framework/apollo/demo/spring/javaConfigDemo/AnnotationApplication.java b/apollo-demo/src/main/java/com/ctrip/framework/apollo/demo/spring/javaConfigDemo/AnnotationApplication.java index 23d5e519935..f0d3e50b7cd 100644 --- a/apollo-demo/src/main/java/com/ctrip/framework/apollo/demo/spring/javaConfigDemo/AnnotationApplication.java +++ b/apollo-demo/src/main/java/com/ctrip/framework/apollo/demo/spring/javaConfigDemo/AnnotationApplication.java @@ -9,7 +9,6 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import java.util.Scanner; /** * @author Jason Song(song_s@ctrip.com) diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java index f1325151ae3..29f66e95cb5 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java @@ -4,7 +4,6 @@ import com.google.common.reflect.TypeToken; import com.google.gson.Gson; -import com.ctrip.framework.apollo.common.dto.AppNamespaceDTO; import com.ctrip.framework.apollo.common.dto.ItemDTO; import com.ctrip.framework.apollo.common.dto.NamespaceLockDTO; import com.ctrip.framework.apollo.common.dto.ReleaseDTO; diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java index e92c5cca07c..17c6fe6b694 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java @@ -20,7 +20,6 @@ import org.springframework.boot.actuate.health.Health; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.data.domain.Pageable; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/component/AdminServiceAddressLocator.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/component/AdminServiceAddressLocator.java index 0e1f26d495c..5cb4f7e9aab 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/component/AdminServiceAddressLocator.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/component/AdminServiceAddressLocator.java @@ -12,8 +12,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.web.HttpMessageConverters; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.web.client.RestTemplate; diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java index 680018aae3d..62e21c8aae2 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java @@ -3,7 +3,6 @@ import com.ctrip.framework.apollo.common.entity.App; import com.ctrip.framework.apollo.common.entity.AppNamespace; import com.ctrip.framework.apollo.common.exception.BadRequestException; -import com.ctrip.framework.apollo.common.exception.ServiceException; import com.ctrip.framework.apollo.core.ConfigConsts; import com.ctrip.framework.apollo.core.enums.ConfigFileFormat; import com.ctrip.framework.apollo.core.utils.StringUtils; diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserService.java index 6aeb2e347e1..1e62543ba61 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserService.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/UserService.java @@ -3,7 +3,6 @@ import com.ctrip.framework.apollo.portal.entity.bo.UserInfo; import java.util.List; -import java.util.Set; /** * @author Jason Song(song_s@ctrip.com) From e2fe61fff661a3cba701826f2b33742c815b4ca6 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Wed, 9 May 2018 22:46:05 +0800 Subject: [PATCH 0006/1104] add known users --- doc/images/known-users/chrtc.png | Bin 0 -> 6386 bytes doc/images/known-users/tuya_logo.png | Bin 0 -> 4582 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/images/known-users/chrtc.png create mode 100644 doc/images/known-users/tuya_logo.png diff --git a/doc/images/known-users/chrtc.png b/doc/images/known-users/chrtc.png new file mode 100644 index 0000000000000000000000000000000000000000..9d3d1f1ce44443f141c233e909f0c5a12a387737 GIT binary patch literal 6386 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 AasU7T literal 0 HcmV?d00001 diff --git a/doc/images/known-users/tuya_logo.png b/doc/images/known-users/tuya_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..528d208a91d674d004dba75ec3bf6133384dda0f GIT binary patch literal 4582 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 K^0l&Nq5lC+N{^KQ literal 0 HcmV?d00001 From f8078770c48caf21a585997f4bdb120c097b9312 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Wed, 9 May 2018 22:48:00 +0800 Subject: [PATCH 0007/1104] add known users --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6e2b1b46efd..408918eabdf 100644 --- a/README.md +++ b/README.md @@ -161,3 +161,5 @@ The project is licensed under the [Apache 2 license](https://github.com/ctripcor ![土巴兔](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/tubatu.png) ![平安银行](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/payh_logo.png) ![新新贷](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/xinxindai.png) +![中国华戎科技集团](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/chrtc.png) +![涂鸦智能](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/tuya_logo.png) From 252dae54d17552fd4995e253628f22bfb3b4f354 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Wed, 9 May 2018 23:05:20 +0800 Subject: [PATCH 0008/1104] add source code analysis link --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 408918eabdf..b5bac454c51 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ Java客户端不依赖任何框架,能够运行于所有Java运行时环境, # Design * [Apollo配置中心设计](https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E8%AE%BE%E8%AE%A1) * [Apollo核心概念之“Namespace”](https://github.com/ctripcorp/apollo/wiki/Apollo%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E4%B9%8B%E2%80%9CNamespace%E2%80%9D) + * [Apollo源码解析](http://www.iocoder.cn/categories/Apollo/) # Development * [Apollo开发指南](https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97) From e8453807e80dc35309bc8813ac55fda1947a1770 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Sat, 12 May 2018 10:45:55 +0800 Subject: [PATCH 0009/1104] add known user --- doc/images/known-users/szlcsc.jpg | Bin 0 -> 6910 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/images/known-users/szlcsc.jpg diff --git a/doc/images/known-users/szlcsc.jpg b/doc/images/known-users/szlcsc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7b1c24546eebe87c12e295904f51b00b87f98bc GIT binary patch literal 6910 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 Q?d9lEb{f$7nwd8EZ-3Ni-T(jq literal 0 HcmV?d00001 From 5be2eb1b66a87845a7aecdc4e015907d7eb0bbc5 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Sat, 12 May 2018 10:47:04 +0800 Subject: [PATCH 0010/1104] add known user --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b5bac454c51..be2ef275acb 100644 --- a/README.md +++ b/README.md @@ -164,3 +164,4 @@ The project is licensed under the [Apache 2 license](https://github.com/ctripcor ![新新贷](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/xinxindai.png) ![中国华戎科技集团](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/chrtc.png) ![涂鸦智能](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/tuya_logo.png) +![立创商城](https://github.com/ctripcorp/apollo/blob/master/doc/images/known-users/szlcsc.jpg) From b35491fa6f7b837f292ee7249b9487b288b1efaf Mon Sep 17 00:00:00 2001 From: Jason Song Date: Sat, 12 May 2018 19:56:28 +0800 Subject: [PATCH 0011/1104] add known user --- doc/images/known-users/hairongyi.png | Bin 0 -> 16810 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/images/known-users/hairongyi.png diff --git a/doc/images/known-users/hairongyi.png b/doc/images/known-users/hairongyi.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce9b87a34974d344c2235e32fc1e9732fc4533f GIT binary patch literal 16810 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