Compare commits
34 Commits
Author | SHA1 | Date |
---|---|---|
|
ae79de4b97 | |
|
3cc49b3d8e | |
|
7b78753758 | |
|
4e102e56d1 | |
|
f94a675959 | |
|
842b0e2135 | |
|
c63c09f580 | |
|
9e91534831 | |
|
8baae0e520 | |
|
5b389c1b84 | |
|
4eeb85fc6f | |
|
c5bce068fa | |
|
8b3f1a37c2 | |
|
844242b493 | |
|
0a9f54f215 | |
|
21972f263b | |
|
483271f2ee | |
|
77a0b1ef6d | |
|
5bfc05876a | |
|
050d10ab5a | |
|
c5498e440d | |
|
546dd7df39 | |
|
6cf028d929 | |
|
83e0bc6809 | |
|
d839e5c9a6 | |
|
1f7bcb2736 | |
|
e4c4d39f18 | |
|
4ff3b44268 | |
|
8fc2b59dbe | |
|
b84631340f | |
|
09833490d2 | |
|
21f9944b6f | |
|
ac97b09c18 | |
|
a28b60f1b3 |
|
@ -6,10 +6,12 @@ notifications:
|
|||
on_success: change
|
||||
on_failure: always
|
||||
|
||||
dist: trusty
|
||||
|
||||
language: java
|
||||
|
||||
jdk:
|
||||
- openjdk10
|
||||
- openjdk8
|
||||
- openjdk7
|
||||
|
||||
script:
|
||||
script:
|
||||
|
|
|
@ -1,144 +0,0 @@
|
|||
### Nacos Config
|
||||
|
||||
First, you have to start a Nacos Server in backend , If you don't know steps, you can learn about [quick start](https://nacos.io/en-us/docs/quick-start.html).
|
||||
|
||||
Suppose your Nacos Server is startup, you would add [`nacos-config-spring-boot-starter`](nacos-config-spring-boot-starter) in your Spring application's dependencies :
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
...
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-config-spring-boot-starter</artifactId>
|
||||
<version>${latest.version}</version>
|
||||
</dependency>
|
||||
|
||||
...
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
Note: Version [0.2.x.RELEASE](https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-boot-starter) is compatible with the Spring Boot 2.x. Version [0.1.x.RELEASE](https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-boot-starter) is compatible with the Spring Boot 1.x.
|
||||
|
||||
After that, you could define some configurations in `application.properties`:
|
||||
|
||||
```properties
|
||||
nacos.config.server-addr=localhost:8848
|
||||
```
|
||||
|
||||
> `nacos.config.server-addr` attribute configures "\${host}:${port}" of your Nacos Server
|
||||
|
||||
Then you could using `@SpringBootApplication` to annotate main class like normal SpringBoot Application and startup:
|
||||
|
||||
```java
|
||||
@SpringBootApplication
|
||||
public class ConfigApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ConfigApplication.class, args);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If you'd like to use "Distributed Configuration" features, `ConfigService` is a core service interface to get or publish config, you could use "Dependency Injection" to inject `ConfigService` instance in your Spring Beans.
|
||||
|
||||
```java
|
||||
@Service
|
||||
public class ConfigServiceDemo {
|
||||
|
||||
@NacosInjected
|
||||
private ConfigService configService;
|
||||
|
||||
public void demoGetConfig() {
|
||||
try {
|
||||
String dataId = "{dataId}";
|
||||
String group = "{group}";
|
||||
String content = configService.getConfig(dataId, groupId, 5000);
|
||||
System.out.println(content);
|
||||
} catch (NacosException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
above code equals below one:
|
||||
|
||||
```java
|
||||
try {
|
||||
// Initialize the configuration service, and the console automatically obtains the following parameters through the sample code.
|
||||
String serverAddr = "{serverAddr}";
|
||||
String dataId = "{dataId}";
|
||||
String group = "{group}";
|
||||
Properties properties = new Properties();
|
||||
properties.put("serverAddr", serverAddr);
|
||||
ConfigService configService = NacosFactory.createConfigService(properties);
|
||||
// Actively get the configuration.
|
||||
String content = configService.getConfig(dataId, group, 5000);
|
||||
System.out.println(content);
|
||||
} catch (NacosException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
```
|
||||
|
||||
## Endpoint
|
||||
|
||||
Nacos config starter support the implementation of Spring Boot actuator endpoints.
|
||||
|
||||
**Prerequisite:**
|
||||
|
||||
Adding `nacos-config-spring-boot-actuator` to your pom.xml in Nacos Config Project.
|
||||
|
||||
Then Configure your endpoint security strategy.
|
||||
|
||||
* Spring Boot1.x
|
||||
|
||||
```properties
|
||||
management.security.enabled=false
|
||||
```
|
||||
|
||||
* Spring Boot2.x
|
||||
|
||||
```properties
|
||||
management.endpoints.web.exposure.include=*
|
||||
```
|
||||
|
||||
To view the endpoint information, visit the following URLS:
|
||||
|
||||
* Spring Boot1.x: URL is http://127.0.0.1:10011/nacos-config.
|
||||
* Spring Boot2.x: URL is http://127.0.0.1:10011/actuator/nacos-config.
|
||||
|
||||
## Health Checks
|
||||
|
||||
`nacos-config-spring-boot-actuator` support the standard Spring Boot `HealthIndicator` as a production-ready feature , which will be aggregated into Spring Boot's `Health` and exported on `HealthEndpoint` that works MVC (Spring Web MVC) if it is available.
|
||||
|
||||
Suppose a Spring Boot Web application did not specify `management.server.port`(SpringBoot1.x using `management.port`), you can access http://localhost:{port}/actuator/health (SpringBoot1.x visit http://localhost:{port}/health) via Web Client and will get a response with JSON format is like below :
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "UP",
|
||||
"details": {
|
||||
"nacosConfig": {
|
||||
"status": "UP"
|
||||
},
|
||||
"diskSpace": {
|
||||
"status": "UP",
|
||||
"details": {
|
||||
"total": 250140434432,
|
||||
"free": 52323512320,
|
||||
"threshold": 10485760
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
For more information about Nacos Spring, see [Nacos Spring Project](https://github.com/nacos-group/nacos-spring-project).
|
||||
|
||||
## Relative Projects
|
||||
|
||||
* [Alibaba Nacos](https://github.com/alibaba/nacos)
|
||||
* [Alibaba Spring Context Support](https://github.com/alibaba/spring-context-support)
|
||||
* [Nacos Spring Project](https://github.com/nacos-group/nacos-spring-project)
|
||||
* [Nacos Spring Cloud Project](https://github.com/spring-cloud-incubator/spring-cloud-alibaba)
|
|
@ -1,131 +0,0 @@
|
|||
### Nacos Discovery
|
||||
|
||||
First, you have to start a Nacos Server in backend , If you don't know steps, you can learn about [quick start](https://nacos.io/en-us/docs/quick-start.html).
|
||||
|
||||
Suppose your Nacos Server is startup, you would add [`nacos-discovery-spring-boot-starter`](nacos-discovery-spring-boot-starter) in your Spring application's dependencies :
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
...
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
|
||||
<version>${latest.version}</version>
|
||||
</dependency>
|
||||
|
||||
...
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
Note: Version [0.2.x.RELEASE](https://mvnrepository.com/artifact/com.alibaba.boot/nacos-discovery-spring-boot-starter) is compatible with the Spring Boot 2.x. Version [0.1.x.RELEASE](https://mvnrepository.com/artifact/com.alibaba.boot/nacos-discovery-spring-boot-starter) is compatible with the Spring Boot 1.x.
|
||||
|
||||
After that, you could define some configurations in `application.properties`:
|
||||
|
||||
```properties
|
||||
nacos.discovery.server-addr=localhost:8848
|
||||
```
|
||||
|
||||
> `nacos.discovery.server-addr` attribute configures "\${host}:${port}" of your Nacos Server
|
||||
|
||||
Then you could using `@SpringBootApplication` to annotate main class like normal SpringBoot Application and startup:
|
||||
|
||||
```java
|
||||
@SpringBootApplication
|
||||
public class DiscoveryApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(DiscoveryApplication.class, args);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If you'd like to use "Service Registry" features, `NamingService` is a core service interface to get or publish config, you could use "Dependency Injection" to inject `NamingService` instance in your Spring Beans.
|
||||
|
||||
```java
|
||||
@Service
|
||||
public class NamingServiceDemo {
|
||||
|
||||
@NacosInjected
|
||||
private NamingService namingService;
|
||||
|
||||
public void demoRegisterService() {
|
||||
try {
|
||||
namingService.registerInstance("test-service", "1.1.1.1", 8080);
|
||||
} catch (NacosException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
above code equals below one:
|
||||
|
||||
```java
|
||||
try {
|
||||
// Initialize the naming service, and the console automatically obtains the following parameters through the sample code.
|
||||
String serverAddr = "{serverAddr}";
|
||||
Properties properties = new Properties();
|
||||
properties.put("serverAddr", serverAddr);
|
||||
NamingService naming = NamingFactory.createNamingService(properties);
|
||||
namingService.registerInstance("test-service", "1.1.1.1", 8080);
|
||||
} catch (NacosException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
```
|
||||
|
||||
For more information about Nacos Spring, see [Nacos Spring Project](https://github.com/nacos-group/nacos-spring-project).
|
||||
|
||||
## Endpoint
|
||||
|
||||
Nacos discovery starter also support the implementation of Spring Boot actuator endpoints.
|
||||
|
||||
**Prerequisite:**
|
||||
|
||||
Adding `nacos-discovery-spring-boot-actuator` to your pom.xml in Nacos Discovery Project.
|
||||
|
||||
Then Configure your endpoint security strategy.
|
||||
|
||||
* Spring Boot1.x
|
||||
|
||||
```properties
|
||||
management.security.enabled=false
|
||||
```
|
||||
|
||||
* Spring Boot2.x
|
||||
|
||||
```properties
|
||||
management.endpoints.web.exposure.include=*
|
||||
```
|
||||
|
||||
To view the endpoint information, visit the following URLS:
|
||||
|
||||
* Spring Boot1.x: URL is http://127.0.0.1:10012/nacos-discovery.
|
||||
* Spring Boot2.x: URL is http://127.0.0.1:10012/actuator/nacos-discovery.
|
||||
|
||||
## Health Checks
|
||||
|
||||
`nacos-discovery-spring-boot-actuator` support the standard Spring Boot `HealthIndicator` as a production-ready feature , which will be aggregated into Spring Boot's `Health` and exported on `HealthEndpoint` that works MVC (Spring Web MVC) if it is available.
|
||||
|
||||
Suppose a Spring Boot Web application did not specify `management.server.port`(SpringBoot1.x using `management.port`), you can access http://localhost:{port}/actuator/health (SpringBoot1.x visit http://localhost:{port}/health) via Web Client and will get a response with JSON format is like below :
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "UP",
|
||||
"details": {
|
||||
"nacosDiscovery": {
|
||||
"status": "UP"
|
||||
},
|
||||
"diskSpace": {
|
||||
"status": "UP",
|
||||
"details": {
|
||||
"total": 250140434432,
|
||||
"free": 52323680256,
|
||||
"threshold": 10485760
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
244
README.md
244
README.md
|
@ -32,8 +32,6 @@ Nacos Spring Boot Project consist of two parts: `nacos-config-spring-boot` and `
|
|||
| -------------- | ------------- |
|
||||
| Java | 1.8+ |
|
||||
| Spring Boot | 2.0.3.RELEASE |
|
||||
| Nacos-Spring-Context | 0.2.2-RC1 |
|
||||
|
||||
|
||||
**1.x branch**
|
||||
|
||||
|
@ -41,16 +39,252 @@ Nacos Spring Boot Project consist of two parts: `nacos-config-spring-boot` and `
|
|||
| -------------- | ------------- |
|
||||
| Java | 1.7+ |
|
||||
| Spring Boot | 1.4.1.RELEASE |
|
||||
| Nacos-Spring-Context | 0.2.2-RC1 |
|
||||
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Nacos Config
|
||||
|
||||
- [Nacos Config Quick Start](https://github.com/nacos-group/nacos-spring-boot-project/blob/master/NACOS-CONFIG-QUICK-START.md)
|
||||
First, you have to start a Nacos Server in backend , If you don't know steps, you can learn about [quick start](https://nacos.io/en-us/docs/quick-start.html).
|
||||
|
||||
- [Nacos Discovery Quick Start](https://github.com/nacos-group/nacos-spring-boot-project/blob/master/NACOS-DISCOVERY-QUICK-START.md)
|
||||
Suppose your Nacos Server is startup, you would add [`nacos-config-spring-boot-starter`](nacos-config-spring-boot-starter) in your Spring application's dependencies :
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
...
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-config-spring-boot-starter</artifactId>
|
||||
<version>${latest.version}</version>
|
||||
</dependency>
|
||||
|
||||
...
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
After that, you could define some configurations in `application.properties`:
|
||||
|
||||
```properties
|
||||
nacos.config.server-addr=localhost
|
||||
```
|
||||
|
||||
> `nacos.config.server-addr` attribute configures "\${host}:${port}" of your Nacos Server
|
||||
|
||||
Then you could using `@SpringBootApplication` to annotate main class like normal SpringBoot Application and startup:
|
||||
|
||||
```java
|
||||
@SpringBootApplication
|
||||
public class ConfigApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ConfigApplication.class, args);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If you'd like to use "Distributed Configuration" features, `ConfigService` is a core service interface to get or publish config, you could use "Dependency Injection" to inject `ConfigService` instance in your Spring Beans.
|
||||
|
||||
```java
|
||||
@Service
|
||||
public class ConfigServiceDemo {
|
||||
|
||||
@NacosInjected
|
||||
private ConfigService configService;
|
||||
|
||||
public void demoGetConfig() {
|
||||
try {
|
||||
String dataId = "{dataId}";
|
||||
String group = "{group}";
|
||||
String content = configService.getConfig(dataId, groupId, 5000);
|
||||
System.out.println(content);
|
||||
} catch (NacosException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
above code equals below one:
|
||||
|
||||
```java
|
||||
try {
|
||||
// Initialize the configuration service, and the console automatically obtains the following parameters through the sample code.
|
||||
String serverAddr = "{serverAddr}";
|
||||
String dataId = "{dataId}";
|
||||
String group = "{group}";
|
||||
Properties properties = new Properties();
|
||||
properties.put("serverAddr", serverAddr);
|
||||
ConfigService configService = NacosFactory.createConfigService(properties);
|
||||
// Actively get the configuration.
|
||||
String content = configService.getConfig(dataId, group, 5000);
|
||||
System.out.println(content);
|
||||
} catch (NacosException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
```
|
||||
|
||||
### Nacos Discovery
|
||||
|
||||
First, you have to start a Nacos Server in backend , If you don't know steps, you can learn about [quick start](https://nacos.io/en-us/docs/quick-start.html).
|
||||
|
||||
Suppose your Nacos Server is startup, you would add [`nacos-discovery-spring-boot-starter`](nacos-discovery-spring-boot-starter) in your Spring application's dependencies :
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
...
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
|
||||
<version>${latest.version}</version>
|
||||
</dependency>
|
||||
|
||||
...
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
After that, you could define some configurations in `application.properties`:
|
||||
|
||||
```properties
|
||||
nacos.discovery.server-addr=localhost
|
||||
```
|
||||
|
||||
> `nacos.discovery.server-addr` attribute configures "\${host}:${port}" of your Nacos Server
|
||||
|
||||
Then you could using `@SpringBootApplication` to annotate main class like normal SpringBoot Application and startup:
|
||||
|
||||
```java
|
||||
@SpringBootApplication
|
||||
public class DiscoveryApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(DiscoveryApplication.class, args);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If you'd like to use "Service Registry" features, `NamingService` is a core service interface to get or publish config, you could use "Dependency Injection" to inject `NamingService` instance in your Spring Beans.
|
||||
|
||||
```java
|
||||
@Service
|
||||
public class NamingServiceDemo {
|
||||
|
||||
@NacosInjected
|
||||
private NamingService namingService;
|
||||
|
||||
public void demoRegisterService() {
|
||||
try {
|
||||
namingService.registerInstance("test-service", "1.1.1.1", 8080);
|
||||
} catch (NacosException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
above code equals below one:
|
||||
|
||||
```java
|
||||
try {
|
||||
// Initialize the naming service, and the console automatically obtains the following parameters through the sample code.
|
||||
String serverAddr = "{serverAddr}";
|
||||
Properties properties = new Properties();
|
||||
properties.put("serverAddr", serverAddr);
|
||||
NamingService naming = NamingFactory.createNamingService(properties);
|
||||
namingService.registerInstance("test-service", "1.1.1.1", 8080);
|
||||
} catch (NacosException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
```
|
||||
|
||||
For more information about Nacos Spring, see [Nacos Spring Project](https://github.com/nacos-group/nacos-spring-project).
|
||||
|
||||
## Endpoint
|
||||
|
||||
Nacos config starter and Nacos discovery starter also support the implementation of Spring Boot actuator endpoints.
|
||||
|
||||
**Prerequisite:**
|
||||
|
||||
Adding `nacos-config-spring-boot-actuator` to your pom.xml in Nacos Config Project.
|
||||
|
||||
Adding `nacos-discovery-spring-boot-actuator` to your pom.xml in Nacos Discovery Project.
|
||||
|
||||
Then Configure your endpoint security strategy.
|
||||
|
||||
* Spring Boot1.x
|
||||
|
||||
```properties
|
||||
management.security.enabled=false
|
||||
```
|
||||
|
||||
* Spring Boot2.x
|
||||
|
||||
```properties
|
||||
management.endpoints.web.exposure.include=*
|
||||
```
|
||||
|
||||
To view the endpoint information, visit the following URLS:
|
||||
|
||||
Nacos Config Project :
|
||||
|
||||
* Spring Boot1.x: Nacos Config Endpoint URL is http://127.0.0.1:10011/nacos-config.
|
||||
* Spring Boot2.x: Nacos Config Endpoint URL is http://127.0.0.1:10011/actuator/nacos-config.
|
||||
|
||||
Nacos Discovery Project:
|
||||
|
||||
* Spring Boot1.x: Nacos Discovery Endpoint URL is http://127.0.0.1:10012/nacos-discovery.
|
||||
* Spring Boot2.x: Nacos Discovery Endpoint URL is http://127.0.0.1:10012/actuator/nacos-discovery.
|
||||
|
||||
## Health Checks
|
||||
|
||||
`nacos-config-spring-boot-actuator` and `nacos-discovery-spring-boot-actuator` support the standard Spring Boot `HealthIndicator` as a production-ready feature , which will be aggregated into Spring Boot's `Health` and exported on `HealthEndpoint` that works MVC (Spring Web MVC) if it is available.
|
||||
|
||||
Suppose a Spring Boot Web application did not specify `management.server.port`(SpringBoot1.x using `management.port`), you can access http://localhost:{port}/actuator/health (SpringBoot1.x visit http://localhost:{port}/health) via Web Client and will get a response with JSON format is like below :
|
||||
|
||||
Nacos Config Project:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "UP",
|
||||
"details": {
|
||||
"nacosConfig": {
|
||||
"status": "UP"
|
||||
},
|
||||
"diskSpace": {
|
||||
"status": "UP",
|
||||
"details": {
|
||||
"total": 250140434432,
|
||||
"free": 52323512320,
|
||||
"threshold": 10485760
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Nacos Discovery Project:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "UP",
|
||||
"details": {
|
||||
"nacosDiscovery": {
|
||||
"status": "UP"
|
||||
},
|
||||
"diskSpace": {
|
||||
"status": "UP",
|
||||
"details": {
|
||||
"total": 250140434432,
|
||||
"free": 52323680256,
|
||||
"threshold": 10485760
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
For more information about Nacos Spring, see [Nacos Spring Project](https://github.com/nacos-group/nacos-spring-project).
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<parent>
|
||||
<artifactId>nacos-spring-boot-parent</artifactId>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../nacos-spring-boot-parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
|
|
@ -16,13 +16,15 @@
|
|||
*/
|
||||
package com.alibaba.boot.nacos.actuate.autoconfigure;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
||||
import org.springframework.boot.actuate.condition.ConditionalOnEnabledEndpoint;
|
||||
import org.springframework.boot.actuate.endpoint.Endpoint;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.alibaba.boot.nacos.actuate.endpoint.NacosConfigEndpoint;
|
||||
import com.alibaba.boot.nacos.config.NacosConfigConstants;
|
||||
|
||||
/**
|
||||
* Nacos Config {@link Endpoint} Auto-{@link Configuration}
|
||||
|
@ -31,11 +33,12 @@ import com.alibaba.boot.nacos.actuate.endpoint.NacosConfigEndpoint;
|
|||
* @see Endpoint
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass(Endpoint.class)
|
||||
public class NacosConfigEndpointAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnEnabledEndpoint
|
||||
@ConditionalOnEnabledEndpoint(NacosConfigConstants.ENDPOINT_PREFIX)
|
||||
public NacosConfigEndpoint nacosEndpoint() {
|
||||
return new NacosConfigEndpoint();
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
*/
|
||||
package com.alibaba.boot.nacos.actuate.autoconfigure;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
|
||||
import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
|
||||
import org.springframework.boot.actuate.autoconfigure.ConditionalOnEnabledHealthIndicator;
|
||||
import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
|
||||
import org.springframework.boot.actuate.health.HealthIndicator;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||
|
|
|
@ -26,8 +26,8 @@ import java.util.Properties;
|
|||
import org.apache.commons.lang3.ClassUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
|
||||
import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
|
||||
import org.springframework.boot.actuate.endpoint.Endpoint;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
|
@ -48,8 +48,7 @@ import com.alibaba.nacos.spring.util.NacosUtils;
|
|||
* @author <a href="mailto:fangjian0423@gmail.com">Jim</a>
|
||||
* @see Endpoint
|
||||
*/
|
||||
@Endpoint(id = NacosConfigConstants.ENDPOINT_PREFIX)
|
||||
public class NacosConfigEndpoint
|
||||
public class NacosConfigEndpoint extends AbstractEndpoint<Map<String, Object>>
|
||||
implements ApplicationListener<NacosConfigMetadataEvent> {
|
||||
|
||||
@Autowired
|
||||
|
@ -57,7 +56,11 @@ public class NacosConfigEndpoint
|
|||
|
||||
private Map<String, JSONObject> nacosConfigMetadataMap = new HashMap<>();
|
||||
|
||||
@ReadOperation
|
||||
public NacosConfigEndpoint() {
|
||||
super(NacosConfigConstants.ENDPOINT_PREFIX);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> invoke() {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ public class NacosConfigHealthIndicator extends AbstractHealthIndicator {
|
|||
@Override
|
||||
protected void doHealthCheck(Health.Builder builder) throws Exception {
|
||||
builder.up();
|
||||
NacosServiceFactory nacosServiceFactory = CacheableEventPublishingNacosServiceFactory.getSingleton();
|
||||
NacosServiceFactory nacosServiceFactory = CacheableEventPublishingNacosServiceFactory.getSingleton();
|
||||
for (ConfigService configService : nacosServiceFactory.getConfigServices()) {
|
||||
if (configService instanceof NacosServiceMetaData) {
|
||||
NacosServiceMetaData nacosServiceMetaData = (NacosServiceMetaData) configService;
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-parent</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../nacos-spring-boot-parent</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
|
|
@ -25,7 +25,7 @@ import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;
|
|||
*/
|
||||
public interface NacosConfigConstants {
|
||||
|
||||
String ENDPOINT_PREFIX = "nacos-config";
|
||||
String ENDPOINT_PREFIX = "nacos_config";
|
||||
|
||||
String ENABLED = EnableNacosConfig.CONFIG_PREFIX + "enabled";
|
||||
|
||||
|
|
|
@ -24,14 +24,15 @@ import com.alibaba.nacos.api.config.ConfigType;
|
|||
import com.alibaba.nacos.spring.core.env.NacosPropertySource;
|
||||
import com.alibaba.nacos.spring.core.env.NacosPropertySourcePostProcessor;
|
||||
import com.alibaba.nacos.spring.factory.CacheableEventPublishingNacosServiceFactory;
|
||||
import com.alibaba.nacos.spring.util.NacosBeanUtils;
|
||||
import com.alibaba.nacos.spring.util.config.NacosConfigLoader;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.ApplicationContextInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.core.env.MutablePropertySources;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
|
@ -41,9 +42,9 @@ import static com.alibaba.nacos.spring.util.NacosUtils.buildDefaultPropertySourc
|
|||
* @author <a href="mailto:liaochunyhm@live.com">liaochuntao</a>
|
||||
* @since
|
||||
*/
|
||||
public class NacosConfigApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||
public class NacosConfigApplicationInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(NacosConfigApplicationContextInitializer.class);
|
||||
private final Logger logger = LoggerFactory.getLogger(NacosConfigApplicationInitializer.class);
|
||||
|
||||
private ConfigurableEnvironment environment;
|
||||
|
||||
|
@ -61,6 +62,7 @@ public class NacosConfigApplicationContextInitializer implements ApplicationCont
|
|||
if (!isEnable()) {
|
||||
logger.info("[Nacos Config Boot] : The preload configuration is not enabled");
|
||||
} else {
|
||||
logger.info("[Nacos Config Boot] : The preload configuration is enabled");
|
||||
nacosConfigProperties = NacosConfigPropertiesUtils.buildNacosConfigProperties(environment);
|
||||
Properties globalProperties = buildGlobalNacosProperties();
|
||||
MutablePropertySources mutablePropertySources = environment.getPropertySources();
|
|
@ -18,6 +18,8 @@ package com.alibaba.boot.nacos.config.autoconfigure;
|
|||
|
||||
import static com.alibaba.nacos.spring.util.NacosBeanUtils.CONFIG_GLOBAL_NACOS_PROPERTIES_BEAN_NAME;
|
||||
|
||||
import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
@ -26,7 +28,6 @@ import org.springframework.context.annotation.Configuration;
|
|||
|
||||
import com.alibaba.boot.nacos.config.NacosConfigConstants;
|
||||
import com.alibaba.boot.nacos.config.properties.NacosConfigProperties;
|
||||
import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
/**
|
||||
|
@ -36,10 +37,10 @@ import org.springframework.context.annotation.Import;
|
|||
*/
|
||||
@ConditionalOnProperty(name = NacosConfigConstants.ENABLED, matchIfMissing = true)
|
||||
@ConditionalOnMissingBean(name = CONFIG_GLOBAL_NACOS_PROPERTIES_BEAN_NAME)
|
||||
@EnableConfigurationProperties(value = NacosConfigProperties.class)
|
||||
@ConditionalOnClass(name = "org.springframework.boot.context.properties.bind.Binder")
|
||||
@Import(value = {NacosConfigBootBeanDefinitionRegistrar.class})
|
||||
@EnableNacosConfig
|
||||
@EnableConfigurationProperties(value = NacosConfigProperties.class)
|
||||
@ConditionalOnClass(name = "org.springframework.boot.bind.RelaxedDataBinder")
|
||||
@Import(value = {NacosConfigBootBeanDefinitionRegistrar.class})
|
||||
public class NacosConfigAutoConfiguration {
|
||||
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package com.alibaba.boot.nacos.config.autoconfigure;
|
||||
|
||||
import com.alibaba.boot.nacos.config.binder.NacosBootConfigurationPropertiesBinder;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
|
@ -46,4 +47,5 @@ public class NacosConfigBootBeanDefinitionRegistrar implements ImportBeanDefinit
|
|||
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,16 +20,15 @@ import com.alibaba.nacos.api.config.ConfigService;
|
|||
import com.alibaba.nacos.api.config.ConfigType;
|
||||
import com.alibaba.nacos.api.config.annotation.NacosConfigurationProperties;
|
||||
import com.alibaba.nacos.spring.context.properties.config.NacosConfigurationPropertiesBinder;
|
||||
import com.alibaba.nacos.spring.core.env.NacosPropertySource;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata;
|
||||
import org.springframework.boot.context.properties.bind.Bindable;
|
||||
import org.springframework.boot.context.properties.bind.Binder;
|
||||
import org.springframework.beans.MutablePropertyValues;
|
||||
import org.springframework.boot.bind.RelaxedDataBinder;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.ResolvableType;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Properties;
|
||||
|
||||
import static com.alibaba.nacos.spring.util.NacosUtils.toProperties;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:liaochunyhm@live.com">liaochuntao</a>
|
||||
|
@ -40,40 +39,21 @@ public class NacosBootConfigurationPropertiesBinder extends NacosConfigurationPr
|
|||
private final Logger logger = LoggerFactory.getLogger(NacosBootConfigurationPropertiesBinder.class);
|
||||
|
||||
private ConfigurableApplicationContext context;
|
||||
private ConfigurationBeanFactoryMetadata beanFactoryMetadata;
|
||||
|
||||
public NacosBootConfigurationPropertiesBinder(ConfigurableApplicationContext applicationContext) {
|
||||
super(applicationContext);
|
||||
this.context = applicationContext;
|
||||
this.beanFactoryMetadata = applicationContext.getBean(
|
||||
ConfigurationBeanFactoryMetadata.BEAN_NAME,
|
||||
ConfigurationBeanFactoryMetadata.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doBind(Object bean, String beanName, String dataId, String groupId,
|
||||
NacosConfigurationProperties properties, String content, ConfigService configService) {
|
||||
|
||||
String name = "nacos-bootstrap-" + beanName;
|
||||
String configType = properties.yaml() ? ConfigType.YAML.getType() : properties.type().getType();
|
||||
|
||||
NacosPropertySource propertySource = new NacosPropertySource(name, dataId, groupId, content, configType);
|
||||
context.getEnvironment().getPropertySources().addLast(propertySource);
|
||||
Binder binder = Binder.get(context.getEnvironment());
|
||||
ResolvableType type = getBeanType(bean, beanName);
|
||||
Bindable<?> target = Bindable.of(type).withExistingValue(bean);
|
||||
binder.bind(properties.prefix(), target);
|
||||
Properties prop = toProperties(dataId, groupId, content, configType);
|
||||
RelaxedDataBinder binder = new RelaxedDataBinder(bean, properties.prefix());
|
||||
binder.bind(new MutablePropertyValues(prop));
|
||||
publishBoundEvent(bean, beanName, dataId, groupId, properties, content, configService);
|
||||
publishMetadataEvent(bean, beanName, dataId, groupId, properties);
|
||||
context.getEnvironment().getPropertySources().remove(name);
|
||||
}
|
||||
|
||||
private ResolvableType getBeanType(Object bean, String beanName) {
|
||||
Method factoryMethod = this.beanFactoryMetadata.findFactoryMethod(beanName);
|
||||
if (factoryMethod != null) {
|
||||
return ResolvableType.forMethodReturnType(factoryMethod);
|
||||
}
|
||||
return ResolvableType.forClass(bean.getClass());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -328,4 +328,4 @@ public class NacosConfigProperties {
|
|||
this.enableRemoteSyncConfig = enableRemoteSyncConfig;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -18,20 +18,19 @@ package com.alibaba.boot.nacos.config.util;
|
|||
|
||||
import com.alibaba.boot.nacos.config.NacosConfigConstants;
|
||||
import com.alibaba.boot.nacos.config.properties.NacosConfigProperties;
|
||||
import com.alibaba.boot.nacos.config.util.editor.NacosCharSequenceEditor;
|
||||
import com.alibaba.boot.nacos.config.util.editor.NacosCustomBooleanEditor;
|
||||
import com.alibaba.boot.nacos.config.util.editor.NacosBooleanEditor;
|
||||
import com.alibaba.boot.nacos.config.util.editor.NacosEnumEditor;
|
||||
import com.alibaba.boot.nacos.config.util.editor.NacosStringEditor;
|
||||
import com.alibaba.nacos.api.config.ConfigType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanWrapper;
|
||||
import org.springframework.beans.BeanWrapperImpl;
|
||||
import org.springframework.beans.propertyeditors.CustomCollectionEditor;
|
||||
import org.springframework.boot.env.OriginTrackedMapPropertySource;
|
||||
import org.springframework.boot.env.EnumerableCompositePropertySource;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.core.env.MutablePropertySources;
|
||||
import org.springframework.core.env.PropertySource;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
@ -50,14 +49,14 @@ public class NacosConfigPropertiesUtils {
|
|||
BeanWrapper wrapper = new BeanWrapperImpl(new NacosConfigProperties());
|
||||
wrapper.setAutoGrowNestedPaths(true);
|
||||
wrapper.setExtractOldValueForEditor(true);
|
||||
wrapper.registerCustomEditor(String.class, new NacosCharSequenceEditor());
|
||||
wrapper.registerCustomEditor(boolean.class, new NacosCustomBooleanEditor(true));
|
||||
wrapper.registerCustomEditor(String.class, new NacosStringEditor());
|
||||
wrapper.registerCustomEditor(boolean.class, new NacosBooleanEditor());
|
||||
wrapper.registerCustomEditor(ConfigType.class, new NacosEnumEditor(ConfigType.class));
|
||||
wrapper.registerCustomEditor(Collection.class, new CustomCollectionEditor(ArrayList.class));
|
||||
PropertySource target = findApplicationConfig(environment);
|
||||
wrapper.setPropertyValues(dataSource((Map<String, String>) target.getSource()));
|
||||
wrapper.setPropertyValues(dataSource((Map<String, Object>) target.getSource()));
|
||||
NacosConfigProperties nacosConfigProperties = (NacosConfigProperties) wrapper.getWrappedInstance();
|
||||
logger.debug("nacosConfigProperties : {}", nacosConfigProperties);
|
||||
logger.info("nacosConfigProperties : {}", nacosConfigProperties);
|
||||
return nacosConfigProperties;
|
||||
}
|
||||
|
||||
|
@ -65,19 +64,29 @@ public class NacosConfigPropertiesUtils {
|
|||
PropertySource<Map<String, String>> target = null;
|
||||
MutablePropertySources mutablePropertySources = environment.getPropertySources();
|
||||
for (PropertySource tmp : mutablePropertySources) {
|
||||
// Spring puts the information of the application.properties file into class{OriginTrackedMapPropertySource}.
|
||||
if (tmp instanceof OriginTrackedMapPropertySource) {
|
||||
target = tmp;
|
||||
// Spring puts the information of the application.properties file into applicationConfigurationProperties.
|
||||
if ("applicationConfigurationProperties".equals(tmp.getName())) {
|
||||
ArrayList<Object> list = (ArrayList) tmp.getSource();
|
||||
for (Object obj : list) {
|
||||
if (obj instanceof EnumerableCompositePropertySource) {
|
||||
EnumerableCompositePropertySource propertySource = (EnumerableCompositePropertySource) obj;
|
||||
target = (PropertySource<Map<String, String>>) propertySource.getSource().iterator().next();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (target != null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
private static Map<String, String> dataSource(Map<String, String> source) {
|
||||
private static Map<String, Object> dataSource(Map<String, Object> source) {
|
||||
source.remove(NacosConfigConstants.NACOS_BOOTSTRAP);
|
||||
String prefix = NacosConfigConstants.PREFIX + ".";
|
||||
HashMap<String, String> targetConfigInfo = new HashMap<>(source.size());
|
||||
for (Map.Entry<String, String> entry : source.entrySet()) {
|
||||
HashMap<String, Object> targetConfigInfo = new HashMap<>(source.size());
|
||||
for (Map.Entry<String, Object> entry : source.entrySet()) {
|
||||
if (entry.getKey().startsWith(prefix)) {
|
||||
String key = entry.getKey().replace(prefix, "");
|
||||
if (key.contains("-")) {
|
||||
|
|
|
@ -77,4 +77,4 @@ public class NacosPropertiesBuilder {
|
|||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 com.alibaba.boot.nacos.config.util.editor;
|
||||
|
||||
import java.beans.PropertyEditorSupport;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:liaochunyhm@live.com">liaochuntao</a>
|
||||
* @since
|
||||
*/
|
||||
public class NacosBooleanEditor extends PropertyEditorSupport {
|
||||
|
||||
public NacosBooleanEditor() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJavaInitializationString() {
|
||||
Object var1 = this.getValue();
|
||||
return var1 != null ? var1.toString() : "null";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAsText() {
|
||||
Object var1 = this.getValue();
|
||||
return var1 instanceof Boolean ? this.getValidName((Boolean)var1) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAsText(String var1) throws IllegalArgumentException {
|
||||
if (var1 == null) {
|
||||
this.setValue((Object)null);
|
||||
} else if (this.isValidName(true, var1)) {
|
||||
this.setValue(Boolean.TRUE);
|
||||
} else {
|
||||
if (!this.isValidName(false, var1)) {
|
||||
throw new IllegalArgumentException(var1);
|
||||
}
|
||||
|
||||
this.setValue(Boolean.FALSE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getTags() {
|
||||
return new String[]{this.getValidName(true), this.getValidName(false)};
|
||||
}
|
||||
|
||||
private String getValidName(boolean var1) {
|
||||
return var1 ? "True" : "False";
|
||||
}
|
||||
|
||||
private boolean isValidName(boolean var1, String var2) {
|
||||
return this.getValidName(var1).equalsIgnoreCase(var2);
|
||||
}
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 com.alibaba.boot.nacos.config.util.editor;
|
||||
|
||||
import java.beans.PropertyEditorSupport;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:liaochunyhm@live.com">liaochuntao</a>
|
||||
* @since
|
||||
*/
|
||||
public class NacosCharSequenceEditor extends PropertyEditorSupport {
|
||||
|
||||
@Override
|
||||
public void setValue(Object value) {
|
||||
if (value == null) {
|
||||
super.setValue("");
|
||||
}
|
||||
if (value instanceof CharSequence) {
|
||||
CharSequence sequence = (CharSequence) value;
|
||||
super.setValue(sequence.toString());
|
||||
} else {
|
||||
super.setValue(value);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAsText() {
|
||||
Object value = getValue();
|
||||
return String.valueOf(value);
|
||||
}
|
||||
}
|
|
@ -1,108 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 com.alibaba.boot.nacos.config.util.editor;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.beans.PropertyEditorSupport;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:liaochunyhm@live.com">liaochuntao</a>
|
||||
* @since
|
||||
*/
|
||||
public class NacosCustomBooleanEditor extends PropertyEditorSupport {
|
||||
|
||||
public static final String VALUE_TRUE = "true";
|
||||
public static final String VALUE_FALSE = "false";
|
||||
|
||||
public static final String VALUE_ON = "on";
|
||||
public static final String VALUE_OFF = "off";
|
||||
|
||||
public static final String VALUE_YES = "yes";
|
||||
public static final String VALUE_NO = "no";
|
||||
|
||||
public static final String VALUE_1 = "1";
|
||||
public static final String VALUE_0 = "0";
|
||||
|
||||
|
||||
@Nullable
|
||||
private final String trueString;
|
||||
|
||||
@Nullable
|
||||
private final String falseString;
|
||||
|
||||
private final boolean allowEmpty;
|
||||
|
||||
public NacosCustomBooleanEditor(boolean allowEmpty) {
|
||||
this(null, null, allowEmpty);
|
||||
}
|
||||
|
||||
public NacosCustomBooleanEditor(@Nullable String trueString, @Nullable String falseString, boolean allowEmpty) {
|
||||
this.trueString = trueString;
|
||||
this.falseString = falseString;
|
||||
this.allowEmpty = allowEmpty;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(Object value) {
|
||||
super.setValue(convert(String.valueOf(value)));
|
||||
}
|
||||
|
||||
public Object convert(String text) throws IllegalArgumentException {
|
||||
String input = (text != null ? text.trim() : null);
|
||||
if (this.allowEmpty && !StringUtils.hasLength(input)) {
|
||||
// Treat empty String as null value.
|
||||
return null;
|
||||
}
|
||||
else if (this.trueString != null && this.trueString.equalsIgnoreCase(input)) {
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
else if (this.falseString != null && this.falseString.equalsIgnoreCase(input)) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
else if (this.trueString == null &&
|
||||
(VALUE_TRUE.equalsIgnoreCase(input) || VALUE_ON.equalsIgnoreCase(input) ||
|
||||
VALUE_YES.equalsIgnoreCase(input) || VALUE_1.equals(input))) {
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
else if (this.falseString == null &&
|
||||
(VALUE_FALSE.equalsIgnoreCase(input) || VALUE_OFF.equalsIgnoreCase(input) ||
|
||||
VALUE_NO.equalsIgnoreCase(input) || VALUE_0.equals(input))) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
else {
|
||||
throw new IllegalArgumentException("Invalid boolean value [" + text + "]");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAsText() {
|
||||
String t = String.valueOf(getValue());
|
||||
if (Boolean.TRUE.equals(Boolean.valueOf(t))) {
|
||||
return (this.trueString != null ? this.trueString : VALUE_TRUE);
|
||||
}
|
||||
else if (Boolean.FALSE.equals(Boolean.valueOf(t))) {
|
||||
return (this.falseString != null ? this.falseString : VALUE_FALSE);
|
||||
}
|
||||
else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -16,11 +16,9 @@
|
|||
*/
|
||||
package com.alibaba.boot.nacos.config.util.editor;
|
||||
|
||||
import com.alibaba.nacos.api.config.ConfigType;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Component;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.beans.PropertyEditor;
|
||||
|
@ -46,8 +44,8 @@ public class NacosEnumEditor implements PropertyEditor {
|
|||
this.type = var1;
|
||||
this.tags = new String[var2.length];
|
||||
|
||||
for(int var3 = 0; var3 < var2.length; ++var3) {
|
||||
this.tags[var3] = ((Enum)var2[var3]).name();
|
||||
for (int var3 = 0; var3 < var2.length; ++var3) {
|
||||
this.tags[var3] = ((Enum) var2[var3]).name();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -59,19 +57,20 @@ public class NacosEnumEditor implements PropertyEditor {
|
|||
|
||||
@Override
|
||||
public void setValue(Object var1) {
|
||||
if (var1 instanceof CharSequence) {
|
||||
ConfigType bean = ConfigType.valueOf(String.valueOf(var1).toUpperCase());
|
||||
if (var1 != null && !this.type.isInstance(var1)) {
|
||||
throw new IllegalArgumentException("Unsupported value: " + var1);
|
||||
} else {
|
||||
Object var2;
|
||||
PropertyChangeListener[] var3;
|
||||
synchronized(this.listeners) {
|
||||
label45: {
|
||||
var2 = this.value;
|
||||
this.value = bean;
|
||||
if (bean == null) {
|
||||
this.value = var1;
|
||||
if (var1 == null) {
|
||||
if (var2 != null) {
|
||||
break label45;
|
||||
}
|
||||
} else if (!bean.equals(var2)) {
|
||||
} else if (!var1.equals(var2)) {
|
||||
break label45;
|
||||
}
|
||||
|
||||
|
@ -86,7 +85,7 @@ public class NacosEnumEditor implements PropertyEditor {
|
|||
var3 = (PropertyChangeListener[])this.listeners.toArray(new PropertyChangeListener[var5]);
|
||||
}
|
||||
|
||||
PropertyChangeEvent var4 = new PropertyChangeEvent(this, (String)null, var2, bean);
|
||||
PropertyChangeEvent var4 = new PropertyChangeEvent(this, (String)null, var2, var1);
|
||||
PropertyChangeListener[] var10 = var3;
|
||||
int var6 = var3.length;
|
||||
|
||||
|
@ -100,17 +99,17 @@ public class NacosEnumEditor implements PropertyEditor {
|
|||
|
||||
@Override
|
||||
public String getAsText() {
|
||||
return this.value != null ? ((Enum)this.value).name() : null;
|
||||
return this.value != null ? ((Enum) this.value).name() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAsText(String var1) {
|
||||
this.setValue(var1 != null ? Enum.valueOf(this.type, var1) : null);
|
||||
this.setValue(var1 != null ? Enum.valueOf(this.type, var1.toUpperCase()) : null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getTags() {
|
||||
return (String[])this.tags.clone();
|
||||
return (String[]) this.tags.clone();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -140,14 +139,14 @@ public class NacosEnumEditor implements PropertyEditor {
|
|||
|
||||
@Override
|
||||
public void addPropertyChangeListener(PropertyChangeListener var1) {
|
||||
synchronized(this.listeners) {
|
||||
synchronized (this.listeners) {
|
||||
this.listeners.add(var1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removePropertyChangeListener(PropertyChangeListener var1) {
|
||||
synchronized(this.listeners) {
|
||||
synchronized (this.listeners) {
|
||||
this.listeners.remove(var1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 com.alibaba.boot.nacos.config.util.editor;
|
||||
|
||||
import java.beans.PropertyEditorSupport;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:liaochunyhm@live.com">liaochuntao</a>
|
||||
* @since
|
||||
*/
|
||||
public class NacosStringEditor extends PropertyEditorSupport {
|
||||
|
||||
public NacosStringEditor() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJavaInitializationString() {
|
||||
Object var1 = this.getValue();
|
||||
if (var1 == null) {
|
||||
return "null";
|
||||
} else {
|
||||
String var2 = var1.toString();
|
||||
int var3 = var2.length();
|
||||
StringBuilder var4 = new StringBuilder(var3 + 2);
|
||||
var4.append('"');
|
||||
|
||||
for(int var5 = 0; var5 < var3; ++var5) {
|
||||
char var6 = var2.charAt(var5);
|
||||
String var7;
|
||||
int var8;
|
||||
switch(var6) {
|
||||
case '\b':
|
||||
var4.append("\\b");
|
||||
continue;
|
||||
case '\t':
|
||||
var4.append("\\t");
|
||||
continue;
|
||||
case '\n':
|
||||
var4.append("\\n");
|
||||
continue;
|
||||
case '\f':
|
||||
var4.append("\\f");
|
||||
continue;
|
||||
case '\r':
|
||||
var4.append("\\r");
|
||||
continue;
|
||||
case '"':
|
||||
var4.append("\\\"");
|
||||
continue;
|
||||
case '\\':
|
||||
var4.append("\\\\");
|
||||
continue;
|
||||
default:
|
||||
if (var6 >= ' ' && var6 <= '~') {
|
||||
var4.append(var6);
|
||||
continue;
|
||||
}
|
||||
|
||||
var4.append("\\u");
|
||||
var7 = Integer.toHexString(var6);
|
||||
var8 = var7.length();
|
||||
}
|
||||
|
||||
while(var8 < 4) {
|
||||
var4.append('0');
|
||||
++var8;
|
||||
}
|
||||
|
||||
var4.append(var7);
|
||||
}
|
||||
|
||||
var4.append('"');
|
||||
return var4.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAsText(String var1) {
|
||||
this.setValue(var1);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
com.alibaba.boot.nacos.config.autoconfigure.NacosConfigAutoConfiguration
|
||||
org.springframework.context.ApplicationContextInitializer=\
|
||||
com.alibaba.boot.nacos.config.autoconfigure.NacosConfigApplicationContextInitializer
|
||||
com.alibaba.boot.nacos.config.autoconfigure.NacosConfigApplicationInitializer
|
|
@ -18,7 +18,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-parent</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../nacos-spring-boot-parent</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<parent>
|
||||
<artifactId>nacos-spring-boot-parent</artifactId>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../nacos-spring-boot-parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
|
|
@ -16,12 +16,14 @@
|
|||
*/
|
||||
package com.alibaba.boot.nacos.discovery.actuate.autoconfigure;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
||||
import org.springframework.boot.actuate.condition.ConditionalOnEnabledEndpoint;
|
||||
import org.springframework.boot.actuate.endpoint.Endpoint;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.alibaba.boot.nacos.discovery.NacosDiscoveryConstants;
|
||||
import com.alibaba.boot.nacos.discovery.actuate.endpoint.NacosDiscoveryEndpoint;
|
||||
|
||||
/**
|
||||
|
@ -31,11 +33,12 @@ import com.alibaba.boot.nacos.discovery.actuate.endpoint.NacosDiscoveryEndpoint;
|
|||
* @see Endpoint
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass(Endpoint.class)
|
||||
public class NacosDiscoveryEndpointsAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnEnabledEndpoint
|
||||
@ConditionalOnEnabledEndpoint(NacosDiscoveryConstants.ENDPOINT_PREFIX)
|
||||
public NacosDiscoveryEndpoint nacosDiscoveryEndpoint() {
|
||||
return new NacosDiscoveryEndpoint();
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
*/
|
||||
package com.alibaba.boot.nacos.discovery.actuate.autoconfigure;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
|
||||
import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
|
||||
import org.springframework.boot.actuate.autoconfigure.ConditionalOnEnabledHealthIndicator;
|
||||
import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
|
||||
import org.springframework.boot.actuate.health.HealthIndicator;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||
|
|
|
@ -23,8 +23,8 @@ import java.util.Map;
|
|||
import java.util.Properties;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
||||
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
|
||||
import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
|
||||
import org.springframework.boot.actuate.endpoint.Endpoint;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
import com.alibaba.boot.nacos.common.PropertiesUtils;
|
||||
|
@ -43,15 +43,18 @@ import com.alibaba.nacos.spring.util.NacosUtils;
|
|||
* @author <a href="mailto:fangjian0423@gmail.com">Jim</a>
|
||||
* @see Endpoint
|
||||
*/
|
||||
@Endpoint(id = NacosDiscoveryConstants.ENDPOINT_PREFIX)
|
||||
public class NacosDiscoveryEndpoint {
|
||||
public class NacosDiscoveryEndpoint extends AbstractEndpoint<Map<String, Object>> {
|
||||
|
||||
@Autowired
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
private static final Integer PAGE_SIZE = 100;
|
||||
|
||||
@ReadOperation
|
||||
public NacosDiscoveryEndpoint() {
|
||||
super(NacosDiscoveryConstants.ENDPOINT_PREFIX);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> invoke() {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
|
@ -59,7 +62,7 @@ public class NacosDiscoveryEndpoint {
|
|||
PropertiesUtils.extractSafeProperties(applicationContext.getBean(
|
||||
DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME, Properties.class)));
|
||||
|
||||
NacosServiceFactory nacosServiceFactory = CacheableEventPublishingNacosServiceFactory.getSingleton();
|
||||
NacosServiceFactory nacosServiceFactory = CacheableEventPublishingNacosServiceFactory.getSingleton();;
|
||||
|
||||
JSONArray array = new JSONArray();
|
||||
for (NamingService namingService : nacosServiceFactory.getNamingServices()) {
|
||||
|
|
|
@ -47,7 +47,7 @@ public class NacosDiscoveryHealthIndicator extends AbstractHealthIndicator {
|
|||
@Override
|
||||
protected void doHealthCheck(Health.Builder builder) throws Exception {
|
||||
builder.up();
|
||||
NacosServiceFactory nacosServiceFactory = CacheableEventPublishingNacosServiceFactory.getSingleton();
|
||||
NacosServiceFactory nacosServiceFactory = CacheableEventPublishingNacosServiceFactory.getSingleton();
|
||||
for (NamingService namingService : nacosServiceFactory.getNamingServices()) {
|
||||
if (namingService instanceof NacosServiceMetaData) {
|
||||
NacosServiceMetaData nacosServiceMetaData = (NacosServiceMetaData) namingService;
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-parent</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../nacos-spring-boot-parent</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
|
|
@ -25,7 +25,7 @@ import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscover
|
|||
*/
|
||||
public interface NacosDiscoveryConstants {
|
||||
|
||||
String ENDPOINT_PREFIX = "nacos-discovery";
|
||||
String ENDPOINT_PREFIX = "nacos_discovery";
|
||||
|
||||
String ENABLED = EnableNacosDiscovery.DISCOVERY_PREFIX + "enabled";
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
package com.alibaba.boot.nacos.discovery.autoconfigure;
|
||||
|
||||
import static com.alibaba.nacos.spring.util.NacosBeanUtils.DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME;
|
||||
import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
|
@ -26,7 +26,8 @@ import org.springframework.context.annotation.Configuration;
|
|||
|
||||
import com.alibaba.boot.nacos.discovery.NacosDiscoveryConstants;
|
||||
import com.alibaba.boot.nacos.discovery.properties.NacosDiscoveryProperties;
|
||||
import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;
|
||||
|
||||
import static com.alibaba.nacos.spring.util.NacosBeanUtils.DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME;
|
||||
|
||||
/**
|
||||
* Nacos Discovery Auto {@link Configuration}
|
||||
|
@ -37,7 +38,7 @@ import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscover
|
|||
@ConditionalOnMissingBean(name = DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME)
|
||||
@EnableNacosDiscovery
|
||||
@EnableConfigurationProperties(value = NacosDiscoveryProperties.class)
|
||||
@ConditionalOnClass(name = "org.springframework.boot.context.properties.bind.Binder")
|
||||
@ConditionalOnClass(name = "org.springframework.boot.bind.RelaxedDataBinder")
|
||||
public class NacosDiscoveryAutoConfiguration {
|
||||
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-parent</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../nacos-spring-boot-parent</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-parent</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../nacos-spring-boot-parent</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package com.alibaba.boot.nacos.common;
|
||||
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
@ -29,11 +30,13 @@ public class PropertiesUtils {
|
|||
|
||||
public static Map<Object, Object> extractSafeProperties(Properties properties) {
|
||||
Map<Object, Object> result = new HashMap<>();
|
||||
properties.forEach((key, val) -> {
|
||||
Enumeration enumeration = properties.propertyNames();
|
||||
while (enumeration.hasMoreElements()) {
|
||||
String key = enumeration.nextElement().toString();
|
||||
if (!PropertyKeyConst.SECRET_KEY.equals(key)) {
|
||||
result.put(key, val);
|
||||
result.put(key, properties.get(key));
|
||||
}
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-project</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
@ -30,12 +30,13 @@
|
|||
<description>Nacos Spring Boot Parent</description>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
<java.source.version>1.8</java.source.version>
|
||||
<java.target.version>1.8</java.target.version>
|
||||
<java.version>1.7</java.version>
|
||||
<java.source.version>1.7</java.source.version>
|
||||
<java.target.version>1.7</java.target.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<spring-boot.version>2.0.3.RELEASE</spring-boot.version>
|
||||
<spring-boot.version>1.4.1.RELEASE</spring-boot.version>
|
||||
<nacos.version>0.1.0</nacos.version>
|
||||
<nacos-spring-context.version>0.3.1</nacos-spring-context.version>
|
||||
<!-- Build args -->
|
||||
<argline>-server -Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m -Dfile.encoding=UTF-8
|
||||
|
@ -57,6 +58,12 @@
|
|||
<dependencyManagement>
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.annotation</groupId>
|
||||
<artifactId>javax.annotation-api</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Spring Boot -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
@ -252,7 +259,7 @@
|
|||
<configuration>
|
||||
<rules>
|
||||
<requireJavaVersion>
|
||||
<version>[1.8,)</version>
|
||||
<version>[1.7,)</version>
|
||||
</requireJavaVersion>
|
||||
<requireProperty>
|
||||
<property>project.name</property>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-samples</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -45,6 +45,11 @@
|
|||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-config-spring-boot-starter</artifactId>
|
||||
|
|
|
@ -26,7 +26,7 @@ import java.util.Map;
|
|||
* @author <a href="mailto:liaochunyhm@live.com">liaochuntao</a>
|
||||
* @since
|
||||
*/
|
||||
@NacosConfigurationProperties(dataId = "apple", type = ConfigType.YAML)
|
||||
@NacosConfigurationProperties(dataId = "apple", type = ConfigType.YAML, ignoreNestedProperties = true)
|
||||
public class Apple {
|
||||
|
||||
private List<String> list;
|
||||
|
@ -56,4 +56,4 @@ public class Apple {
|
|||
", listMap=" + listMap +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,8 +20,8 @@ import static org.springframework.core.env.StandardEnvironment.SYSTEM_ENVIRONMEN
|
|||
import static org.springframework.core.env.StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME;
|
||||
|
||||
import com.alibaba.nacos.api.annotation.NacosProperties;
|
||||
import com.alibaba.nacos.spring.context.annotation.EnableNacos;
|
||||
import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;
|
||||
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySources;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
|
@ -44,14 +44,16 @@ import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
|
|||
* @author <a href="mailto:fangjian0423@gmail.com">Jim</a>
|
||||
*/
|
||||
@SpringBootApplication
|
||||
@NacosPropertySource(
|
||||
name = "custom",
|
||||
dataId = ConfigApplication.DATA_ID,
|
||||
first = true,
|
||||
before = SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME,
|
||||
after = SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME
|
||||
)
|
||||
@NacosPropertySource(dataId = "people", autoRefreshed = true)
|
||||
@NacosPropertySources(value = {
|
||||
@NacosPropertySource(dataId = "people", autoRefreshed = true),
|
||||
@NacosPropertySource(
|
||||
name = "custom",
|
||||
dataId = ConfigApplication.DATA_ID,
|
||||
first = true,
|
||||
before = SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME,
|
||||
after = SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME
|
||||
)
|
||||
})
|
||||
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "192.168.16.104:8848"))
|
||||
public class ConfigApplication {
|
||||
|
||||
|
@ -80,13 +82,8 @@ public class ConfigApplication {
|
|||
return new Foo();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Apple apple() {
|
||||
return new Apple();
|
||||
}
|
||||
|
||||
@NacosConfigListener(
|
||||
dataId = "people",
|
||||
dataId = DATA_ID,
|
||||
timeout = 500
|
||||
)
|
||||
public void onChange(String newContent) throws Exception {
|
||||
|
@ -94,6 +91,29 @@ public class ConfigApplication {
|
|||
System.out.println("onChange : " + newContent);
|
||||
}
|
||||
|
||||
public static class FirstCommandLineRunner implements CommandLineRunner {
|
||||
|
||||
@NacosInjected
|
||||
private ConfigService configService;
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
if (configService.publishConfig(DATA_ID, Constants.DEFAULT_GROUP, content)) {
|
||||
Thread.sleep(200);
|
||||
System.out.println("First runner success: " + configService
|
||||
.getConfig(DATA_ID, Constants.DEFAULT_GROUP, 5000));
|
||||
}
|
||||
else {
|
||||
System.out.println("First runner error: publish config error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Apple apple() {
|
||||
return new Apple();
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnProperty(prefix = "people", name = "enable", havingValue = "true")
|
||||
protected static class People {
|
||||
|
@ -106,23 +126,6 @@ public class ConfigApplication {
|
|||
|
||||
}
|
||||
|
||||
public static class FirstCommandLineRunner implements CommandLineRunner {
|
||||
|
||||
@NacosInjected
|
||||
private ConfigService configService;
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
if (configService.publishConfig(DATA_ID, Constants.DEFAULT_GROUP, content)) {
|
||||
Thread.sleep(200);
|
||||
System.out.println("First runner success: " + configService.getConfig(DATA_ID, Constants.DEFAULT_GROUP, 5000));
|
||||
}
|
||||
else {
|
||||
System.out.println("First runner error: publish config error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class SecondCommandLineRunner implements CommandLineRunner {
|
||||
|
||||
@NacosValue("${dept:unknown}")
|
||||
|
|
|
@ -22,12 +22,13 @@ import org.springframework.stereotype.Controller;
|
|||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:liaochunyhm@live.com">liaochuntao</a>
|
||||
* @since
|
||||
*/
|
||||
@Controller
|
||||
@RestController
|
||||
public class TestController {
|
||||
|
||||
@NacosValue(value = "${people.enable:bbbbb}", autoRefreshed = true)
|
||||
|
@ -43,7 +44,7 @@ public class TestController {
|
|||
}
|
||||
|
||||
@GetMapping("/apple")
|
||||
public Apple getApplr() {
|
||||
public Apple getApple() {
|
||||
return apple;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
nacos.config.server-addr=192.168.16.104:8848
|
||||
nacos.config.data-id=people
|
||||
nacos.config.group=DEFAULT_GROUP
|
||||
|
@ -19,5 +18,7 @@ nacos.config.ext-config[0].enable-remote-sync-config=true
|
|||
|
||||
server.port=10011
|
||||
|
||||
security.basic.enabled=false
|
||||
management.security.enabled=false
|
||||
management.endpoints.web.exposure.include=*
|
||||
management.endpoint.health.show-details=always
|
|
@ -1,20 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You 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
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You 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.
|
||||
-->
|
||||
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.
|
||||
-->
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:nacos="http://nacos.io/schema/nacos"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-samples</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
@ -45,6 +45,11 @@
|
|||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
|
||||
|
|
|
@ -71,9 +71,9 @@ public class DiscoveryApplication {
|
|||
public void run(String... args) throws Exception {
|
||||
List<Instance> instanceList = namingService.getAllInstances("test-service");
|
||||
System.out.println("found instance: " + instanceList.size());
|
||||
instanceList.forEach(instance -> {
|
||||
for(Instance instance : instanceList) {
|
||||
System.out.println(instance);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,5 +2,4 @@ nacos.discovery.server-addr=localhost:8848
|
|||
|
||||
server.port=10012
|
||||
|
||||
management.endpoints.web.exposure.include=*
|
||||
management.endpoint.health.show-details=always
|
||||
management.security.enabled=false
|
|
@ -20,7 +20,7 @@
|
|||
<parent>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-parent</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
<relativePath>../nacos-spring-boot-parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
|
12
pom.xml
12
pom.xml
|
@ -14,7 +14,7 @@
|
|||
</properties>
|
||||
<groupId>com.alibaba.boot</groupId>
|
||||
<artifactId>nacos-spring-boot-project</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<version>0.1.2</version>
|
||||
|
||||
<packaging>pom</packaging>
|
||||
|
||||
|
@ -54,15 +54,7 @@
|
|||
|
||||
</mailingLists>
|
||||
<developers>
|
||||
<developer>
|
||||
<id>Jim</id>
|
||||
<name>Jim Fang</name>
|
||||
<email>fangjian0423@gmail.com</email>
|
||||
<url>https://github.com/fangjian0423</url>
|
||||
<roles>
|
||||
<role>Developer</role>
|
||||
</roles>
|
||||
</developer>
|
||||
|
||||
</developers>
|
||||
|
||||
<profiles>
|
||||
|
|
Loading…
Reference in New Issue