文章目录
-
-
-
-
- [Add Dependencies](#Add Dependencies)
- [Configure Properties](#Configure Properties)
- [Nacos Application](#Nacos Application)
- [Nacos Config](#Nacos Config)
- [Nacos Controller](#Nacos Controller)
- [Add Config File to Nacos Server](#Add Config File to Nacos Server)
- [Start and Visit Service](#Start and Visit Service)
-
-
-
Add Dependencies
kotlin
plugins {
id("org.jetbrains.kotlin.jvm") version "2.0.21" apply false
id("org.jetbrains.kotlin.kapt") version "2.0.21" apply false
id("org.jetbrains.kotlin.plugin.spring") version "2.0.21" apply false
id("org.springframework.boot") version "3.4.1" apply false
}
kotlin
plugins {
id("org.jetbrains.kotlin.jvm")
id("org.jetbrains.kotlin.kapt")
id("org.jetbrains.kotlin.plugin.spring")
id("org.springframework.boot")
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
dependencies {
val springBootVersion = "3.4.1"
val springCloudVersion = "4.2.0"
// commons
api("io.github.hellogoogle2000:kotlin-commons:1.0.19")
// kotlin
api("org.jetbrains.kotlin:kotlin-reflect:2.0.21")
// spring
api("org.springframework.boot:spring-boot-starter:$springBootVersion")
api("org.springframework.boot:spring-boot-starter-web:$springBootVersion")
api("org.springframework.boot:spring-boot-devtools:$springBootVersion")
api("org.springframework.cloud:spring-cloud-starter-bootstrap:$springCloudVersion")
// nacos config
api("com.alibaba.nacos:nacos-spring-context:2.1.1")
api("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2023.0.3.2")
api("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2023.0.3.2")
}
Configure Properties
config file must named to bootstrap.properties
properties
# service
server.port=10003
spring.application.name=nacos-app
Nacos Application
kotlin
package x.spring.hello
import com.alibaba.nacos.api.annotation.NacosProperties
import com.alibaba.nacos.api.config.ConfigType
import com.alibaba.nacos.spring.context.annotation.EnableNacos
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@EnableNacos(
globalProperties = NacosProperties(
serverAddr = "localhost:8848",
username = "root",
password = "123456",
namespace = "public"
)
)
@NacosPropertySource(
type = ConfigType.JSON,
dataId = "nacos-app-dev.json",
groupId = "DEFAULT_GROUP",
autoRefreshed = true
)
@SpringBootApplication
class NacosClientApplication
fun main(args: Array<String>) {
runApplication<NacosClientApplication>(*args)
}
Nacos Config
kotlin
package x.spring.hello.component
import com.alibaba.nacos.api.config.ConfigType
import com.alibaba.nacos.api.config.annotation.NacosConfigurationProperties
import org.springframework.stereotype.Component
@Component
@NacosConfigurationProperties(
type = ConfigType.JSON,
dataId = "nacos-app-dev.json",
groupId = "DEFAULT_GROUP",
autoRefreshed = true
)
data class NacosDevConfig(
var username: String = "",
var password: String = ""
)
Nacos Controller
kotlin
package x.spring.hello.controller
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
import x.kotlin.commons.serialize.JSON.toJson
import x.spring.hello.component.NacosDevConfig
@RestController
class NacosConfigController {
@Autowired
private lateinit var config: NacosDevConfig
@GetMapping("/config")
fun all(): String {
return config.copy().toJson()
}
}
Add Config File to Nacos Server
server config file must match client annotations
properties
http://localhost:8848/nacos
properties
namespace : public
data-id : nacos-app-dev.json
group : DEFAULT_GROUP
format : JSON
json
{
"username": "root",
"password": "123456"
}
Start and Visit Service
properties
http://localhost:10003/config
modify server config file, then client config values will automatically reload