diff --git a/kenaito-conf-dotnet-client/README.md b/kenaito-conf-dotnet-client/README.md index 7cac6f1..eddf530 100644 --- a/kenaito-conf-dotnet-client/README.md +++ b/kenaito-conf-dotnet-client/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center .NET Client +[English](README_EN.md) | 中文 + kenaito-conf 配置中心的 .NET 客户端 SDK。 ## 安装 diff --git a/kenaito-conf-dotnet-client/README_EN.md b/kenaito-conf-dotnet-client/README_EN.md new file mode 100644 index 0000000..2ced144 --- /dev/null +++ b/kenaito-conf-dotnet-client/README_EN.md @@ -0,0 +1,75 @@ +# Kenaito Config Center .NET Client + +.NET client SDK for the Kenaito Config Center. + +## Installation + +### Local Build + +```bash +cd kenaito-conf-dotnet-client +dotnet build +``` + +### As Local Dependency + +Reference in the demo project's csproj: + +```xml + + + +``` + +## Quick Start + +```csharp +using Kenaito.Conf.Client; + +var config = new Config +{ + BaseUrl = "http://localhost:8080", + AppName = "kenaito-dotnet-demo", + Env = "daily", + SyncInterval = 10 +}; + +var client = new Client(config); + +client.OnChange(changed => +{ + Console.WriteLine("Config changed:"); + foreach (var kv in changed) + { + Console.WriteLine($" {kv.Key} = {kv.Value}"); + } +}); + +await client.StartAsync(); + +var dbHost = client.Get("database.host"); +Console.WriteLine($"database.host = {dbHost}"); + +Console.ReadLine(); +client.Stop(); +``` + +## Configuration + +| Parameter | Description | Default | Required | +|-----------|-------------|---------|----------| +| BaseUrl | Config center URL | - | Yes | +| AppName | Application name | - | Yes | +| Env | Environment | dev | No | +| Version | Config version | latest | No | +| Token | Auth token | null | No | +| SyncInterval | Sync interval (seconds) | 10 | No | +| CacheDir | Cache directory | . | No | +| IgnoreGlobal | Whether to ignore global configs | false | No | + +## Features + +- Fetch all configs on startup +- Periodic incremental config sync +- Local file cache, load from cache when service is unavailable +- Config change callback notification diff --git a/kenaito-conf-go-client/README.md b/kenaito-conf-go-client/README.md index 6d373b3..399a279 100644 --- a/kenaito-conf-go-client/README.md +++ b/kenaito-conf-go-client/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center Go Client +[English](README_EN.md) | 中文 + Go 语言的配置中心客户端 SDK。 ## 功能特性 diff --git a/kenaito-conf-go-client/README_EN.md b/kenaito-conf-go-client/README_EN.md new file mode 100644 index 0000000..829db01 --- /dev/null +++ b/kenaito-conf-go-client/README_EN.md @@ -0,0 +1,144 @@ +# Kenaito Config Center Go Client + +Go client SDK for the Kenaito Config Center. + +## Features + +- Fetch application configs from the config center +- Periodic config sync +- Config change callback listener +- Local file cache (fallback when config center is unavailable) + +## Installation + +### Option 1: Using go mod (Recommended) + +Run in your project root: + +```bash +go get kenaito-conf/go-client +``` + +### Option 2: Local Development + +If you are developing or modifying the client code locally, use the `replace` directive: + +```bash +# Add to your go.mod +require kenaito-conf/go-client v0.0.0 + +replace kenaito-conf/go-client => ../kenaito-conf-go-client +``` + +Then run: + +```bash +go mod tidy +``` + +## Quick Start + +```go +package main + +import ( + "fmt" + "kenaito-conf/go-client" + "log" +) + +func main() { + // Create config + cfg := &client.Config{ + BaseURL: "http://localhost:8080", + AppName: "my-app", + Env: "daily", + Version: "latest", + Token: "", // Optional, if app token verification is enabled + SyncInterval: 30, // Sync interval in seconds + CacheDir: ".", // Cache directory + } + + // Create client + c := client.New(cfg) + + // Register config change callback + c.OnChange(func(changed map[string]string) { + fmt.Println("Config changed:") + for k, v := range changed { + fmt.Printf(" %s = %s\n", k, v) + } + }) + + // Start client (fetch configs + enable periodic sync) + if err := c.Start(); err != nil { + log.Fatalf("Failed to start: %v", err) + } + defer c.Stop() + + // Read config + value := c.Get("database.host") + fmt.Printf("database.host = %s\n", value) + + // Get all configs + all := c.GetAll() + for k, v := range all { + fmt.Printf("%s = %s\n", k, v) + } +} +``` + +## Configuration + +| Parameter | Type | Description | Default | +|-----------|------|-------------|---------| +| `BaseURL` | string | Config center URL | Required | +| `AppName` | string | Application name | Required | +| `Env` | string | Environment (dev/daily/prod) | `dev` | +| `Version` | string | Config version | `latest` | +| `Token` | string | App token (if token verification is enabled) | Empty | +| `SyncInterval` | int | Sync interval (seconds) | `60` | +| `IgnoreGlobal` | bool | Whether to ignore global configs | `false` | +| `CacheDir` | string | Local cache directory | `.` | + +## API Reference + +### `client.New(cfg *Config) *Client` + +Create a client instance. + +### `(*Client).Start() error` + +Start the client, fetch configs and enable periodic sync. + +### `(*Client).Stop()` + +Stop the client and disable periodic sync. + +### `(*Client).Get(key string) string` + +Get the value of a specific config entry. + +### `(*Client).GetAll() map[string]string` + +Get all config entries. + +### `(*Client).OnChange(handler func(map[string]string))` + +Register a config change callback. The function is called when configs change, with the changed key-value pairs as argument. + +## Demo + +See the full example at: [kenaito-conf-go-client-demo](../kenaito-conf-go-client-demo) + +Run the demo: + +```bash +cd kenaito-conf-go-client-demo +go run main.go +``` + +## Notes + +1. **Token Verification**: If the app has a token configured, pass the correct token value in `Config.Token` +2. **Cache File**: The client creates a `config-cache.json` file in the `CacheDir` directory as a fallback when the config center is unavailable diff --git a/kenaito-conf-lua-client/README.md b/kenaito-conf-lua-client/README.md index 58a6522..83935fd 100644 --- a/kenaito-conf-lua-client/README.md +++ b/kenaito-conf-lua-client/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center Lua Client +[English](README_EN.md) | 中文 + Lua 客户端 SDK,适用于 Lua 5.1+ 项目。 ## 安装 diff --git a/kenaito-conf-lua-client/README_EN.md b/kenaito-conf-lua-client/README_EN.md new file mode 100644 index 0000000..d4dfd41 --- /dev/null +++ b/kenaito-conf-lua-client/README_EN.md @@ -0,0 +1,95 @@ +# Kenaito Config Center Lua Client + +Lua client SDK for the Kenaito Config Center, suitable for Lua 5.1+ projects. + +## Installation + +### Using LuaRocks (Recommended) + +```bash +cd kenaito-conf-lua-client +luarocks make +``` + +### Manual Install + +Copy the `kenaito_conf` directory to your Lua path, or add it to `package.path`: + +```lua +package.path = package.path .. ";/path/to/kenaito-conf-lua-client/?.lua" +``` + +## Dependencies + +- Lua 5.1+ +- LuaSocket (`luasocket`) +- dkjson (`dkjson`) + +## Usage + +```lua +local kenaito = require("kenaito_conf") + +local config = kenaito.Config.new({ + base_url = "http://localhost:8080", + app_name = "my-app", + env = "daily", + sync_interval = 10 +}) + +local client = kenaito.Client.new({ config = config }) + +-- Listen for config changes +client:on_change(function(changed) + for k, v in pairs(changed) do + print("config changed: " .. k .. " = " .. v) + end +end) + +-- Start client (fetch configs) +client:start() + +-- Get config +local value = client:get("database.host") +local all = client:get_all() + +-- Manual sync +client:sync_once() + +-- Stop +client:stop() +``` + +## Configuration + +| Parameter | Description | Default | +|-----------|-------------|---------| +| `base_url` | Config center URL | `http://localhost:8080` | +| `app_name` | Application name | (Required) | +| `env` | Environment | `dev` | +| `version` | Config version | `latest` | +| `token` | App token | Empty | +| `sync_interval` | Sync interval (seconds) | `10` | +| `ignore_global` | Whether to ignore global configs | `false` | +| `cache_dir` | Cache directory | `.` | + +## Demo + +```bash +cd kenaito-conf-lua-client-demo +lua app.lua +``` + +## Environment Variables + +The demo supports the following environment variables: + +| Variable | Description | Default | +|----------|-------------|---------| +| `KENAITO_BASE_URL` | Config center URL | `http://localhost:8080` | +| `KENAITO_APP_NAME` | Application name | `kenaito-springboot-demo` | +| `KENAITO_ENV` | Environment | `daily` | +| `KENAITO_VERSION` | Config version | `latest` | +| `KENAITO_TOKEN` | App token | Empty | +| `KENAITO_SYNC_INTERVAL` | Sync interval (seconds) | `10` | +| `KENAITO_CACHE_DIR` | Cache directory | `.` | diff --git a/kenaito-conf-nodejs-client/README.md b/kenaito-conf-nodejs-client/README.md index 435e57a..5d1886c 100644 --- a/kenaito-conf-nodejs-client/README.md +++ b/kenaito-conf-nodejs-client/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center Node.js Client +[English](README_EN.md) | 中文 + ## 安装 ### 安装到本地仓库(推荐) diff --git a/kenaito-conf-nodejs-client/README_EN.md b/kenaito-conf-nodejs-client/README_EN.md new file mode 100644 index 0000000..75475c3 --- /dev/null +++ b/kenaito-conf-nodejs-client/README_EN.md @@ -0,0 +1,101 @@ +# Kenaito Config Center Node.js Client + +Node.js client SDK for the Kenaito Config Center. + +## Installation + +### Install to Local Repository (Recommended) + +Register the package as a global symlink, then reference it from any project via `npm link kenaito-conf`: + +```bash +cd kenaito-conf-nodejs-client +npm link +``` + +In your project: + +```bash +npm link kenaito-conf +``` + +### Direct Reference + +```bash +# In your project's package.json +"dependencies": { + "kenaito-conf": "file:../kenaito-conf-nodejs-client" +} +``` + +```bash +npm install +``` + +## Quick Start + +```javascript +import { Config, ConfigClient } from 'kenaito-conf'; + +const config = new Config({ + baseUrl: 'http://localhost:8080', + appName: 'my-app', + env: 'daily', + syncInterval: 30, +}); + +const client = new ConfigClient(config); + +// Listen for config changes +client.onChange((changed) => { + for (const [k, v] of Object.entries(changed)) { + console.log(`config changed: ${k} = ${v}`); + } +}); + +// Start client (fetch configs + enable periodic sync) +await client.start(); + +// Get config +const value = client.get('database.host'); +const allConfigs = client.getAll(); + +// Stop +client.stop(); +``` + +## Configuration + +| Parameter | Description | Default | +|-----------|-------------|---------| +| `baseUrl` | Config center URL | Required | +| `appName` | Application name | Required | +| `env` | Environment (dev/daily/prod) | `dev` | +| `version` | Config version | `latest` | +| `token` | Auth token | Empty | +| `syncInterval` | Sync interval (seconds) | `60` | +| `ignoreGlobal` | Whether to ignore global configs | `false` | +| `cacheDir` | Local cache directory | `.` | + +## Demo + +```bash +cd kenaito-conf-nodejs-client-demo +npm install +node app.js +``` + +The demo listens on port `8083` by default. Visit `http://localhost:8083/` to view configs. + +Environment variable overrides: + +| Environment Variable | Description | Default | +|----------------------|-------------|---------| +| `SERVER_PORT` | Server port | `8083` | +| `KENAITO_BASE_URL` | Config center URL | `http://localhost:8080` | +| `KENAITO_APP_NAME` | Application name | `kenaito-nodejs-demo` | +| `KENAITO_PROFILE` | Environment | `daily` | +| `KENAITO_VERSION` | Config version | `latest` | +| `KENAITO_TOKEN` | Auth token | Empty | +| `KENAITO_SYNC_INTERVAL` | Sync interval (seconds) | `30` | +| `KENAITO_CACHE_DIR` | Cache directory | `.` | diff --git a/kenaito-conf-perl-client/README.md b/kenaito-conf-perl-client/README.md index 73c63cd..4205efd 100644 --- a/kenaito-conf-perl-client/README.md +++ b/kenaito-conf-perl-client/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center Perl Client +[English](README_EN.md) | 中文 + Perl 客户端 SDK,适用于 Perl 5.16+ 项目。 ## 安装 diff --git a/kenaito-conf-perl-client/README_EN.md b/kenaito-conf-perl-client/README_EN.md new file mode 100644 index 0000000..5861c03 --- /dev/null +++ b/kenaito-conf-perl-client/README_EN.md @@ -0,0 +1,89 @@ +# Kenaito Config Center Perl Client + +Perl client SDK for the Kenaito Config Center, suitable for Perl 5.16+ projects. + +## Installation + +### Install from Local + +```bash +cd kenaito-conf-perl-client +cpanm . +``` + +### Development Mode (Symlink) + +Add the lib path in your demo project: + +```perl +use lib '/path/to/kenaito-conf-perl-client/lib'; +``` + +## Usage + +```perl +use Kenaito::Conf::Config; +use Kenaito::Conf::Client; + +my $cfg = Kenaito::Conf::Config->new( + base_url => 'http://localhost:8080', + app_name => 'my-app', + env => 'daily', + version => 'latest', + token => '', + sync_interval => 10, + cache_dir => '.', +); + +my $client = Kenaito::Conf::Client->new(config => $cfg); + +# Listen for config changes +$client->on_change(sub { + my ($changed) = @_; + for my $k (keys %$changed) { + print "config changed: $k = $changed->{$k}\n"; + } +}); + +# Start client (fetch configs) +$client->start(); + +# Get config +my $value = $client->get('database.host'); +my $all = $client->get_all(); + +# Manual sync +$client->sync_once(); + +# Stop +$client->stop(); +``` + +## Configuration + +| Parameter | Description | Default | +|-----------|-------------|---------| +| `base_url` | Config center URL | `http://localhost:8080` | +| `app_name` | Application name | (Required) | +| `env` | Environment | `dev` | +| `version` | Config version | `latest` | +| `token` | App token | Empty | +| `sync_interval` | Sync interval (seconds) | `60` | +| `ignore_global` | Whether to ignore global configs | `0` | +| `cache_dir` | Cache directory | `.` | + +## Dependencies + +- Perl 5.16+ +- HTTP::Tiny +- JSON::PP + +## Demo + +```bash +cd kenaito-conf-perl-client-demo +KENAITO_BASE_URL=http://localhost:8080 \ +KENAITO_APP_NAME=kenaito-springboot-demo \ +KENAITO_ENV=daily \ +perl app.pl +``` diff --git a/kenaito-conf-php-client/README.md b/kenaito-conf-php-client/README.md index 8cc4bce..1c3d306 100644 --- a/kenaito-conf-php-client/README.md +++ b/kenaito-conf-php-client/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center PHP Client +[English](README_EN.md) | 中文 + PHP 客户端 SDK,适用于 PHP 7.4+ 项目。 ## 安装 diff --git a/kenaito-conf-php-client/README_EN.md b/kenaito-conf-php-client/README_EN.md new file mode 100644 index 0000000..444778e --- /dev/null +++ b/kenaito-conf-php-client/README_EN.md @@ -0,0 +1,102 @@ +# Kenaito Config Center PHP Client + +PHP client SDK for the Kenaito Config Center, suitable for PHP 7.4+ projects. + +## Installation + +### Using Composer (Recommended) + +```bash +cd kenaito-conf-php-client +composer install +``` + +In your project: + +```bash +composer require kenaito/conf-client +``` + +### Manual Include + +```php +require_once '/path/to/kenaito-conf-php-client/autoload.php'; +``` + +## Usage + +```php +require_once 'vendor/autoload.php'; + +use Kenaito\Conf\Config; +use Kenaito\Conf\Client; + +$config = new Config([ + 'baseUrl' => 'http://localhost:8080', + 'appName' => 'my-app', + 'env' => 'daily', + 'syncInterval' => 10, +]); + +$client = new Client($config); + +// Listen for config changes +$client->onChange(function(array $changed) { + foreach ($changed as $key => $value) { + echo "config changed: $key = $value\n"; + } +}); + +// Start client (fetch configs) +$client->start(); + +// Get config +$value = $client->get('database.host'); +$all = $client->getAll(); + +// Manual sync +$client->syncOnce(); + +// Stop +$client->stop(); +``` + +## Configuration + +| Parameter | Description | Default | +|-----------|-------------|---------| +| `baseUrl` | Config center URL | `http://localhost:8080` | +| `appName` | Application name | (Required) | +| `env` | Environment | `dev` | +| `version` | Config version | `latest` | +| `token` | App token | Empty | +| `syncInterval` | Sync interval (seconds) | `10` | +| `ignoreGlobal` | Whether to ignore global configs | `false` | +| `cacheDir` | Cache directory | `.` | + +## Dependencies + +- PHP 7.4+ +- ext-curl +- ext-json + +## Demo + +```bash +cd kenaito-conf-php-client-demo +php app.php +``` + +## Environment Variables + +The demo supports the following environment variables: + +| Variable | Description | Default | +|----------|-------------|---------| +| `KENAITO_BASE_URL` | Config center URL | `http://localhost:8080` | +| `KENAITO_APP_NAME` | Application name | `kenaito-springboot-demo` | +| `KENAITO_ENV` | Environment | `daily` | +| `KENAITO_VERSION` | Config version | `latest` | +| `KENAITO_TOKEN` | App token | Empty | +| `KENAITO_SYNC_INTERVAL` | Sync interval (seconds) | `10` | +| `KENAITO_CACHE_DIR` | Cache directory | `.` | diff --git a/kenaito-conf-python-client/README.md b/kenaito-conf-python-client/README.md index 7d59361..f33d30d 100644 --- a/kenaito-conf-python-client/README.md +++ b/kenaito-conf-python-client/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center Python Client +[English](README_EN.md) | 中文 + ## 安装 ```bash diff --git a/kenaito-conf-python-client/README_EN.md b/kenaito-conf-python-client/README_EN.md new file mode 100644 index 0000000..fc46562 --- /dev/null +++ b/kenaito-conf-python-client/README_EN.md @@ -0,0 +1,78 @@ +# Kenaito Config Center Python Client + +Python client SDK for the Kenaito Config Center. + +## Installation + +```bash +cd kenaito-conf-python-client +pip3 install -e . +``` + +## Quick Start + +```python +from kenaito_conf import Config, ConfigClient + +config = Config( + base_url="http://localhost:8080", + app_name="my-app", + env="daily", + sync_interval=30, +) + +client = ConfigClient(config) + +# Listen for config changes +def on_change(changed): + for k, v in changed.items(): + print(f"config changed: {k} = {v}") + +client.on_change(on_change) + +# Start client (fetch configs + enable periodic sync) +client.start() + +# Get config +value = client.get("database.host") +all_configs = client.get_all() + +# Stop +client.stop() +``` + +## Configuration + +| Parameter | Description | Default | +|-----------|-------------|---------| +| `base_url` | Config center URL | Required | +| `app_name` | Application name | Required | +| `env` | Environment (dev/daily/prod) | `dev` | +| `version` | Config version | `latest` | +| `token` | Auth token | Empty | +| `sync_interval` | Sync interval (seconds) | `60` | +| `ignore_global` | Whether to ignore global configs | `False` | +| `cache_dir` | Local cache directory | `.` | + +## Demo + +```bash +cd kenaito-conf-python-client-demo +pip3 install -r requirements.txt +python3 app.py +``` + +The demo listens on port `8082` by default. Visit `http://localhost:8082/` to view configs. + +Environment variable overrides: + +| Environment Variable | Description | Default | +|----------------------|-------------|---------| +| `SERVER_PORT` | Server port | `8082` | +| `KENAITO_BASE_URL` | Config center URL | `http://localhost:8080` | +| `KENAITO_APP_NAME` | Application name | `kenaito-springboot-demo` | +| `KENAITO_PROFILE` | Environment | `daily` | +| `KENAITO_VERSION` | Config version | `latest` | +| `KENAITO_TOKEN` | Auth token | Empty | +| `KENAITO_SYNC_INTERVAL` | Sync interval (seconds) | `30` | +| `KENAITO_CACHE_DIR` | Cache directory | `.` | diff --git a/kenaito-conf-springboot2-client/README.md b/kenaito-conf-springboot2-client/README.md index 63b9709..6b765f4 100644 --- a/kenaito-conf-springboot2-client/README.md +++ b/kenaito-conf-springboot2-client/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center Spring Boot 2 Client +[English](README_EN.md) | 中文 + 适用于 Spring Boot 2.x 应用的配置中心客户端,支持配置自动刷新和 `@Value` 注解动态更新。 ## 安装 diff --git a/kenaito-conf-springboot2-client/README_EN.md b/kenaito-conf-springboot2-client/README_EN.md new file mode 100644 index 0000000..b43592e --- /dev/null +++ b/kenaito-conf-springboot2-client/README_EN.md @@ -0,0 +1,165 @@ +# Kenaito Config Center Spring Boot 2 Client + +Config center client for Spring Boot 2.x applications, supporting automatic config refresh and dynamic `@Value` annotation updates. + +## Installation + +### Maven Dependency + +```xml + + cn.odboy + kenaito-conf-springboot2-client + 1.0.3 + +``` + +### Local Install (Development) + +```bash +cd kenaito-conf-springboot2-client +mvn clean install +``` + +## Quick Start + +### 1. Configuration File + +Add config center connection parameters in `application.properties`: + +```properties +# Config center URL +kenaito.configcenter.base-url=http://localhost:8080 + +# Application name (required) +kenaito.configcenter.app-name=my-app + +# Environment (dev/daily/prod) +kenaito.configcenter.env=daily + +# Config version +kenaito.configcenter.version=latest + +# Auth token (optional) +kenaito.configcenter.token=your-token + +# Whether to enable remote config (default true) +kenaito.configcenter.enabled=true + +# Sync interval in seconds (default 10) +kenaito.configcenter.sync-interval=10 + +# Sensitive config keys (for log masking, optional) +kenaito.configcenter.sensitive-keys=password,secret,key,token +``` + +### 2. Inject Configs with @Value + +```java +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.GetMapping; + +@RestController +public class ConfigController { + + @Value("${database.host:localhost}") + private String databaseHost; + + @Value("${database.port:3306}") + private Integer databasePort; + + @Value("${kenaito.feature.enabled:false}") + private Boolean featureEnabled; + + @GetMapping("/config") + public Map getConfig() { + Map config = new HashMap<>(); + config.put("databaseHost", databaseHost); + config.put("databasePort", databasePort); + config.put("featureEnabled", featureEnabled); + return config; + } +} +``` + +### 3. Automatic Config Refresh + +When configs change in the config center, the client automatically refreshes `@Value` annotated fields without restarting the application. + +**Config change listener log:** +``` +[RefreshScope] Refreshed @Value field: ConfigController.databaseHost | old='localhost' | new='192.168.1.100' | converted='192.168.1.100' | verify='192.168.1.100' | success=true +``` + +### 4. Using @ConfigurationProperties + +```java +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "database") +public class DatabaseProperties { + + private String host; + private Integer port; + private String username; + private String password; + + // getters and setters +} +``` + +## Configuration Properties + +| Property | Description | Default | Required | +|----------|-------------|---------|----------| +| `kenaito.configcenter.base-url` | Config center URL | - | Yes | +| `kenaito.configcenter.app-name` | Application name | - | Yes | +| `kenaito.configcenter.env` | Environment | `dev` | No | +| `kenaito.configcenter.version` | Config version | `latest` | No | +| `kenaito.configcenter.token` | Auth token | Empty | No | +| `kenaito.configcenter.enabled` | Whether to enable | `true` | No | +| `kenaito.configcenter.sync-interval` | Sync interval (seconds) | `10` | No | +| `kenaito.configcenter.sensitive-keys` | Sensitive keys (log masking) | Empty | No | + +## Auto Configuration + +The client works via Spring Boot auto-configuration: + +- **KenaitoEnvironmentInitializer**: Initializes the config center connection +- **KenaitoRefreshAutoConfiguration**: Registers the config refresh listener + +No manual Bean configuration needed — just add the dependency and configure the properties. + +## Demo + +Run the demo project: + +```bash +cd kenaito-conf-springboot2-client-demo +mvn spring-boot:run +``` + +Demo defaults: +- Port: 8083 +- App name: `kenaito-springboot2-demo` +- Environment: `daily` +- Config center URL: `http://localhost:8080` + +Visit `http://localhost:8083/config` to view current configs. + +## Notes + +1. **@Value Refresh Limitation**: Only supports primitive types (String, Integer, Boolean, Long, Double, etc.) and their wrapper classes +2. **Config Priority**: Remote config > Local config > Default value +3. **Log Masking**: Configs containing sensitive keys are automatically masked in logs (first half + `****`) +4. **Network Errors**: Sync failures are logged as errors without affecting normal application operation + +## Changelog + +- **1.0.3** - Simplified config refresh logic, removed EnvironmentChangeEvent wrapper +- **1.0.2** - Added sensitive config masking support +- **1.0.1** - Added sync interval configuration +- **1.0.0** - Initial release