日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring boot实战(第四篇)分散配置

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring boot实战(第四篇)分散配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

分散配置是系統必不可少的一部分,將配置參數抽離出來為后期維護提供很大的便利。spring boot 默認支持兩個格式的配置文件:.properties?.yml。

.properties與.yml

*.properties屬性文件;屬于最常見的一種;?
*.yml是yaml格式的文件,yaml是一種非常簡潔的標記語言。

在*.properties中定義user.address.stree=hangzhou等價與yaml文件中的

?

user:address: stree:hangzhou

?

從上可以發現yaml層次感更強,具體在項目中選擇那種資源文件是沒有什么規定的。

spring boot配置

簡單案例

首先在類路徑下創建application.properties文件并定義?
name=liaokailin

創建一個beanUser.java

?

@Component public class User {private @Value("${name:lkl}") String name;public String getName() {return name;}public void setName(String name) {this.name = name;}

?

?

?

?

?

在?HelloWorldController.java調用對應bean

?

package com.lkl.springboot.controller;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;import com.lkl.springboot.config.User; import com.lkl.springboot.event.CallEventDemo;@RestController @RequestMapping("/springboot") public class HelloWorldController {@AutowiredCallEventDemo callEventDemo;@AutowiredUser user;@RequestMapping(value = "/{name}", method = RequestMethod.GET)@ResponseBodypublic String sayWorld(@PathVariable("name") String name) {System.out.println("userName:" + user.getName()); return "Hello " + name;}}

?

啟動該spring boot工程,在命令行執行

curl http://localhost:8080/springboot/liaokailin?
控制臺成功輸出name對應值

解析

  • 在spring boot中默認會加載?
    classpath:/,classpath:/config/,file:./,file:./config/?路徑下以application命名的property或yaml文件;
  • 參數spring.config.location設置配置文件存放位置
  • 參數spring.config.name設置配置文件名稱

配置文件獲取隨機數

在spring boot配置文件中可調用Random中方法

在application.properties中為user增加age參數?age=${random.int}

?

name=liaokailin age=${random.int}


bean中同時增加參數

?

?

@Component public class User {private @Value("${name:lkl}") String name;private @Value("${age}") Integer age;//getter and setter and toString()


在啟動工程時會為age隨機生成一個值

?

?

${random.int(100)} : 限制生成的數字小于10 ${random.int[0,100]} : 指定范圍的數字


在配置文件調用占位符

?

修改配置文件:

?

userName=liaokailin age=${random.int[0,100]} remark=hello,my name is ${userName},age is ${age}


修改bean:

?

?

@Component public class User {private @Value("${userName:lkl}") String name;private @Value("${age}") Integer age;private @Value("${remark}") String remark;


執行發現remark答應出:?

?

remark=hello,my name is liaokailin,age is 25。

可以發現將name修改為userName,在配置文件中調用${name}是工程名。

去掉@Value

大家可以發現前面在bean中調用配置參數使用的為注解@Value,在spring boot中是可以省去該注解。

配置文件:

?

userName=liaokailin age=${random.int[0,100]} remark=hello,my name is ${userName},age is ${age} user.address=china,hangzhou


增加user.address=china,hangzhou,為了調用該參數來使用@ConfigurationProperties

?

User.java

?

@Component @ConfigurationProperties(prefix = "user") public class User {private @Value("${userName:lkl}") String name;private @Value("${age}") Integer age;private @Value("${remark}") String remark;private String address;


使用@ConfigurationProperties需要指定prefix,同時bean中的屬性和配置參數名保持一致。

?

實體嵌套配置

在User中定義一個Address實體同樣可以快捷配置

User.java

?

@Component @ConfigurationProperties(prefix = "user") public class User {private @Value("${userName:lkl}") String name;private @Value("${age}") Integer age;private @Value("${remark}") String remark;private String address;private Address detailAddress;

?

?

?

?

?

Address.java

?
public class Address {

?

private String country; private String province; private String city; ...


application.properties`

userName=liaokailin age=${random.int[0,100]} remark=hello,my name is ${userName},age is ${age} user.address=china,hangzhou user.detailAddress.country=china user.detailAddress.province=zhejiang user.detailAddress.city=hangzhou

?

?

?

運行得到

?

userUser [name=liaokailin, age=57, remark=hello,my name is liaokailin,age is 0, address=china,hangzhou, detailAddress=Address [country=china, province=zhejiang, city=hangzhou]]


這種嵌套關系如果通過yaml文件展示出來層次感會更強。

?

?

user:detailAddress:country:chinaprovince:zhejiangcity:hangzhou


注意在yaml中縮進不要使用TAB

?

配置集合

一個人可能有多個聯系地址,那么地址為集合

User.java

@Component @ConfigurationProperties(prefix = "user") public class User {private @Value("${userName:lkl}") String name;private @Value("${age}") Integer age;private @Value("${remark}") String remark;private String address;private Address detailAddress;private List<Address> allAddress = new ArrayList<Address>();

?

?

?

application.properties

?

user.allAddress[0].country=china user.allAddress[0].province=zhejiang user.allAddress[0].city=hangzhouuser.allAddress[1].country=china user.allAddress[1].province=anhui user.allAddress[1].city=anqing


```

?

通過`下標`表明對應記錄為集合中第幾條數據,得到結果:

?

userUser [name=liaokailin, age=64, remark=hello,my name is liaokailin,age is 82, address=china,hangzhou, detailAddress=Address [country=china, province=zhejiang, city=hangzhou], allAddress=[Address [country=china, province=zhejiang, city=hangzhou], Address [country=china, province=anhui, city=anqing]]]

?

?

?

?

?

如果用yaml文件表示為:

application.yml

user:-allAddress:country:chinaprovince:zhejiangcity:hangzhou-allAddress:country:chinaprovince:anhuicity:anqing

?

?

?

多配置文件

spring boot設置多配置文件很簡單,可以在bean上使用注解@Profile("development")即調用application-development.properties|yml文件,也可以調用SpringApplication中的etAdditionalProfiles()方法。

例如:

package com.lkl.springboot;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Profile;import com.lkl.springboot.listener.MyApplicationStartedEventListener;@Profile("development") @SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication app = new SpringApplication(Application.class);// app.setAdditionalProfiles("development");app.addListeners(new MyApplicationStartedEventListener());app.run(args);} }

?

?

?

也可以通過啟動時指定參數spring.profiles.active。

題外話

在實際項目中最好是將配置參數抽離出來集中管理,比如利用淘寶的super-diamond ,consul,zk 等。

總結

以上是生活随笔為你收集整理的spring boot实战(第四篇)分散配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产sm调教一区二区 | 精品国产乱子伦 | 国产高清视频在线 | 亚洲中文字幕第一区 | 91精品国产乱码久久久 | 国产三级在线 | 黄色录象片 | 久久成人在线观看 | 日b在线观看 | 国精品一区二区三区 | 欧美日韩亚洲国产另类 | av成人亚洲 | 爱啪啪影视 | 樱桃av | 成年人视频在线播放 | 色八戒av | 深夜福利在线播放 | 四级毛片| 亚洲日本香蕉视频 | 精品欧美一区二区精品久久 | 欧美午夜一区 | 91啪在线观看 | 快播怡红院| 日韩欧美在线视频免费观看 | 亚洲伦理天堂 | 致命弯道8在线观看免费高清完整 | 国产二区在线播放 | 久久影视 | 成人在线观看一区二区三区 | 黄色片视频在线观看 | 日韩中文字幕一区二区三区 | 夫の上司に犯波多野结衣853 | 国产真实乱在线更新 | 清纯唯美亚洲 | 国产不卡免费视频 | 色妻av| 日韩免费福利视频 | 一区二区免费视频 | 国产精品嫩草影院桃色 | 国产免费一区视频观看免费 | 久草久| 久久精品一区二区三区黑人印度 | 五月天婷婷久久 | 岛国裸体写真hd在线 | 天天夜夜草 | 亚洲二三区 | 亚洲区小说区图片区 | 日本新japanese乱熟 | 国产视频一二三区 | 午夜av免费 | 爱情岛亚洲论坛入口 | 美女精品视频 | 欧美黑人又粗又大的性格特点 | 国产乱大交 | 亚洲综合激情小说 | 国内精品人妻无码久久久影院蜜桃 | 成人福利一区二区 | 一本大道伊人av久久综合 | 久久久综合久久久 | 欧美国产高清 | 国产精品伦 | 日韩不卡一区二区三区 | 性色影院 | 久久久男人天堂 | 日本一区视频 | 少妇高潮惨叫久久久久 | 欧美三级视频网站 | 我的丝袜美腿尤物麻麻 | 午夜精品久久久久久久蜜桃 | 男男黄网站| 亚洲午夜视频在线观看 | 精品国产免费无码久久久 | 色综合久久综合 | 亚洲天堂手机在线 | 台湾swag在线观看 | 日韩精品一区二区亚洲av性色 | 国产精品丝袜一区二区 | 国产精品九九热 | 亚洲自拍成人 | 四虎在线视频 | 爱爱免费小视频 | 欧日韩不卡在线视频 | 欧美日韩高清丝袜 | 中文字幕精品一二三四五六七八 | 午夜在线视频 | 欧美色99 | 久久疯狂做爰流白浆xx | 欧美a级成人淫片免费看 | 最新一区二区三区 | 国内精品免费视频 | 97伊人 | 亚洲在线网站 | 成人动漫在线观看 | 色综合久久综合 | 欧美日韩色视频 | 免费无毒av | 粗大的内捧猛烈进出在线视频 | 激情av中文字幕 | 日韩亚洲在线 |