Spring配置中${}语法解析及Eureka自定义主机名配置求助
Spring微服务配置相关问题解答
1. 配置文件中${}语法的含义与配置方式
${}是Spring配置文件里的占位符引用语法,用来复用已定义的配置值,来源可以是系统环境变量、配置文件内部属性、JVM启动参数等,还可以设置默认值避免未定义时出错。
常见使用场景与示例
引用配置文件内部属性
properties格式:# 先定义基础属性 app.service-name=order-center # 引用该属性拼接路径 server.servlet.context-path=/api/${app.service-name}yml格式:
app: service-name: order-center server: servlet: context-path: /api/${app.service-name}引用系统环境变量
比如读取系统的数据库账号密码环境变量:db.username=${DB_USERNAME} db.password=${DB_PASSWORD}设置默认值
如果不确定属性是否已定义,可以用${属性名:默认值}的格式,比如:server.port=${APP_PORT:8080}当
APP_PORT未定义时,会自动使用8080作为端口。
2. Eureka主机名配置及电脑名非法字符问题解决
Eureka主机名的核心信息
- 含义:Eureka中的主机名是服务实例的网络标识,用来在服务注册与发现过程中让Eureka Server和Client互相识别、通信。
- 配置方式:通过
eureka.instance.hostname属性配置,支持properties和yml格式:
properties示例:
yml示例:eureka.instance.hostname=eureka-server-01eureka: instance: hostname: eureka-server-01 - 取值来源:默认情况下Spring会自动获取当前机器的系统主机名;也可以手动指定自定义名称或IP地址。
电脑名含下划线的解决办法
因为DNS标准规定主机名不能包含下划线,Eureka会校验主机名合法性,所以可以用以下两种方式解决:
- 手动指定合法主机名:直接在配置里设置符合规范的主机名,完全绕开系统主机名:
eureka.instance.hostname=user-service-01 - 使用IP地址替代主机名:开启IP优先模式,让服务用IP注册到Eureka,无需依赖主机名:
# 开启IP优先 eureka.instance.prefer-ip-address=true # 可选:手动指定IP,不指定的话Spring会自动获取当前机器的IP eureka.instance.ip-address=192.168.3.15
内容的提问来源于stack exchange,提问作者Alok Sardar
相关产品推荐
相关产品推荐

