網站首頁 編程語言 正文
一、Nacos的概述
Nacos 是 Dynamic Naming and Configuration Service的首字母簡稱,是一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺,是阿里巴巴的新開源項目 。
Nacos主要提供三種功能:服務注冊與發現、動態配置服務、動態DNS服務。
二、Nacos的安裝和啟動
1.下載
Nacos下載地址:Tags · alibaba/nacos · GitHub
2.安裝
將下載好的Nacos安裝包上傳到到linux服務上,使用xshell進行安裝包上傳。
[root@localhost ~]# rz #上傳命令
[root@localhost ~]# mv nacos-server-1.4.1.tar.gz /usr/local #移動安裝包
[root@localhost local]# tar -zxvf nacos-server-1.4.1.tar.gz #解壓安裝包
[root@localhost local]# rm -rf nacos-server-1.4.1.tar.gz #刪除安裝包
3.啟動
[root@localhost local]# cd nacos/bin/
[root@localhost bin]# ./startup.sh -m standalone #非集群模式啟動
[root@localhost bin]# ./startup.sh -m standalone
/usr/local/jdk1.8.0_191/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/local/jdk1.8.0_191/jre/lib/ext:/usr/local/jdk1.8.0_191/lib/ext -Xloggc:/usr/local/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/usr/local/nacos/plugins/health,/usr/local/nacos/plugins/cmdb -Dnacos.home=/usr/local/nacos -jar /usr/local/nacos/target/nacos-server.jar --spring.config.additional-location=file:/usr/local/nacos/conf/ --logging.config=/usr/local/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /usr/local/nacos/logs/start.out
4.測試
瀏覽器訪問:http://192.168.238.132:8848/nacos,默認用戶名/密碼為: nacos/nacos
注意:此網址為自己安裝nacos虛擬機的ip地址;
????????? 如果Linux開啟了防火墻的話需要把8848端口給放行,這樣才能通過外網訪問該端口。
//開放防火墻 systemctl start firewalld //關閉防火墻 systemctl stop firewalld //開放nacos端口 //命令含義: // --zone #作用域 // --add-port=8848/tcp #添加端口,格式為:端口/通訊協議 // --permanent #永久生效,沒有此參數重啟后失效 firewall-cmd --zone=public --add-port=8848/tcp --permanent # 重啟防火墻 firewall-cmd --reload # 查看防火墻啟動端口情況 firewall-cmd --list-all # 如果顯示了該8848端口則為啟動成功。
?
5.關閉
[root@localhost bin]# ./shutdown.sh
The nacosServer(8166) is running...
Send shutdown request to nacosServer(8166) OK
三、Nacos注冊中心入門
1.什么是Nacos注冊中心
注冊中心主要有三部分組成:
?????????Nacos-Server:注冊中心
????????????????提供服務的注冊和發現。
?????????Nacos-Provider:服務提供方
????????????????把自身的服務實例注冊到 Nacos Server 中
?????????Nacos-Consumer:服務調用方
????????????????通過 Nacos Server 獲取服務列表,消費服務。
2.代碼案例
案例結構:
父工程pom.xml
<dependencies>
<!--Spring Boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Netflix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud 阿里巴巴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
springcloud_common模塊
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud_parent</artifactId>
<groupId>com.wrs</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud_common</artifactId>
</project>
pojo層
public class User {
private Integer id;
private String name;
private Integer age;
public User() {
}
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
nacos_provider模塊
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.wrs</groupId>
<artifactId>springcloud_common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--nacos客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 9090
啟動器
@SpringBootApplication
@EnableDiscoveryClient //向注冊中心注冊該服務,并可以獲取其他服務的調用地址
public class NacosProviderApp {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApp.class);
}
}
service層
public interface UserService {
User getUserById(Integer id);
}
@Service
public class UserServiceImpl implements UserService {
@Override
public User getUserById(Integer id) {
return new User(id,"張三",18);
}
}
controller控制層
@RestController
@RequestMapping("/provider")
public class ProviderController {
@Autowired
private UserService userService;
@RequestMapping("/getUserById/{id}")
public User getUserById(@PathVariable Integer id){
return userService.getUserById(id);
}
}
nacos_consumer模塊
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.wrs</groupId>
<artifactId>springcloud_common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--nacos客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 80
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.238.132:8848 #nacos服務的地址
application:
name: nacos-provider #向注冊中心注冊的名字
啟動器
@SpringBootApplication
@EnableDiscoveryClient//向注冊中心注冊該服務,并可以獲取其他服務的調用地址
public class ProviderApp {
public static void main(String[] args) {
SpringApplication.run(ProviderApp.class);
}
}
config配置層
@Configuration
public class ConfigBean {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
controller控制層
@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient; //發現服務的工具類
@RequestMapping(value="/getUserById/{id}")
public User getUserById(@PathVariable Integer id){
//獲取nacos中注冊的所有服務信息
List<String> serviceList = discoveryClient.getServices();
for (String service : serviceList) {
System.out.println(service);
}
//獲取nacos中注冊的指定服務信息
ServiceInstance instance = discoveryClient.getInstances("nacos-provider").get(0);
String serviceUrl = instance.getHost() + ":" + instance.getPort();
String url = "http://"+serviceUrl+"/provider/getUserById/"+id;
return restTemplate.getForObject(url, User.class);
}
}
測試:
通過兩個模塊的啟動,進行注冊,注冊到服務中心,如下圖:
3. 為什么要使用注冊中心?
因為不使用注冊中心:1.地址硬編碼
??????????????????????????????????? 2.不能負載均衡
四、配置中心
1.配置中心入門
微服務架構下關于配置文件的一些問題:
-
配置文件相對分散。在一個微服務架構下,配置文件會隨著微服務的增多變的越來越多,而且分散在各個微服務中,不好統一配置和管理。
-
配置文件無法區分環境。微服務項目可能會有多個環境,例如:測試環境、預發布環境、生產環境。每一個環境所使用的配置理論上都是不同的,一旦需要修改,就需要我們去各個微服務下手動維護,這比較困難。
-
配置文件無法實時更新。我們修改了配置文件之后,必須重新啟動微服務才能使配置生效,這對一個正在運行的項目來說是非常不友好的。
基于上面這些問題,我們就需要配置中心的加入來解決這些問題, 配置中心的思路是:
-
首先把項目中各種配置全部都放到一個集中的地方進行統一管理。
-
當各個服務需要獲取配置的時候,就來配置中心的接口拉取自己的配置。
-
當配置中心中的各種參數有更新的時候,也能通知到各個服務實時的過來同步最新的信息,使之動態更新。
nacos配置中心的作用:
??? 系統配置的集中管理(編輯、存儲、分發)、動態更新不重啟、回滾配置(變更管理、歷史版本管理、變更審計)等所有與配置相關的活動。
創建nacos_config模塊
添加依賴pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
bootstrap.yml
????????添加一個比application.yml文件優先級更高的配置文件 bootstrap.yml
????????bootstrap/application的應用場景:
- bootstrap.yml 比 application.yml 優先加載,應用于系統級別參數配置,一般不會變動;
- application.yml 應用于 SpringBoot 項目的自動化配置;
spring:
cloud:
nacos:
config:
server-addr: 192.168.238.132:8848 #配置中心得地址
file-extension: yaml #配置文件擴展名只支持properties和yaml
prefix: nacos-config #文件名,默認是spring.application.name
添加配置:
在 Nacos 中,dataId(配置文件的命名的規則) 的完整格式如下:
${spring.cloud.nacos.config.prefix}.${spring.cloud.nacos.config.file-extension}
說明:
spring.cloud.nacos.config.prefix:默認是當前服務的服務名稱
spring.cloud.nacos.config.file-extension:配置文件的格式(后綴),目前只支持yaml和properties
- 在nacos中創建配置文件
- ?Data ID:prefix.file-extension
- ?配置格式:yaml或properties
?controller控制器:
在配置內容中添加:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/health?characterEncoding=UTF-8
username: root
password: 1111
type: com.alibaba.druid.pool.DruidDataSource
可利用controller層進行讀取,將所添加的內容顯示到頁面上
@RefreshScope? 作用:在修改配置文件后則重新生成bean,能夠實時更新配置內容
@RestController
@RefreshScope //修改配置文件后則重新生成bean
public class ConfigController {
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.type}")
private String type;
@GetMapping("/config/info")
public String getConfigInfo(){
System.out.println(this);
String configInfo=driverClassName+"<br>"+url+"<br>"+username+"<br>"
+password+"<br>"+type;
return configInfo;
}
}
啟動器
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApp {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApp.class);
}
}
動態實時更新配置原理:
當啟動時加載配置文件
修改配置文件后nacos監聽到MD5有變化則推送消息給客戶端(實際上就是調用客戶端),客戶端收到消息后會拉去最新配置
MD5相當于UUID,每次配置文件修改后,都會生成一個新版本,生成一個新的MD5,然后通知客戶端,給客戶端發送信息,客戶端拉去更新后的配置信息
nacos會在本地緩存一份配置文件,當需要時能夠直接從本地獲取使用,如果配置文件有改動,則會從新獲取一份,緩存到本地
一般會緩存到以下目錄中
?可以通過瀏覽器訪問:http://127.0.0.1/config/info? 查看配置信息
為什么要用配置中心:
因為配置中心可以:1. 集中管理配置文件
?? ?? ?????????????????????????? 2.動態更新配置文件
2.配置中心隔離
1.配置管理模型
對于Nacos配置管理,通過Namespace、group、Data ID能夠定位到一個配置集。
Namespace Group DataId介紹:
-
Namespace: 代表不同的環境的配置隔離, 如: 開發、測試, 生產等
-
Group: 可以代表某個項目, 如XX醫療項目, XX電商項目
-
DataId: 每個項目下往往有若干個工程, 每個配置集(DataId)是一個工程的主配置文件
獲取配置集需要指定:
??????? 1.nacos服務地址,必須指定
??????? 2.namespace,如不指定默認public
??????? 3.group,如不指定默認為DEFAULT_GROUP
namespace隔離
命名空間(Namespace)是用于隔離多個環境的(如開發、測試、生產),而每個應用在不同環境的同一個配置(如數據庫數據源)的值是不一樣的。因此,我們應針對企業項目實際研發流程、環境進行規劃。如某軟件公司擁有開發、測試、生產三套環境,那么我們應該針對這三個環境分別建立三個namespace。
新建namespace
?建立好namespace后,在配置管理與服務管理模塊下所有頁面,都會包含用于切換namespace的選項卡,如下圖:
克隆配置文件
點擊左下角
“克隆”
按鈕,將會彈出克隆對話框,此功能可用于將配置遷移到其他Namespace。
?選擇中一個要克隆到的目標空間,也可以對克隆的配置文件進行Data ID,Group 名稱修改,不修改則是默認被克隆的配置文件的Data ID,Group的名稱,點擊“開始克隆”,
?點擊克隆后,則是將被克隆的配置文件的內容全部克隆過來。
在bootstrap.yml中添加namesspace屬性,例如:“namespace: dev”,依舊可以進行動態配置
spring: cloud: nacos: config: server-addr: 192.168.238.132:8848 #配置中心得地址 file-extension: yaml #配置文件擴展名只支持properties和yaml prefix: nacos-config #文件名,默認是spring.application.name namespace: dev #開發環境
Group隔離
1.新建配置文件并修改Group名
2.不同的配置分組下可以有相同的配置 ,相當于一個大文件夾(dev)有兩個小文件夾(group)
?bootstrap.yml
spring: cloud: nacos: config: server-addr: 192.168.238.132:8848 #配置中心得地址 file-extension: yaml #配置文件擴展名只支持properties和yaml prefix: nacos-config #文件名,默認是spring.application.name namespace: dev #開發環境 group: NACOS_GROUP #項目名
服務隔離
nacos_provider模塊中application.yml
server: port: 9090 spring: cloud: nacos: discovery: server-addr: 192.168.238.132:8848 #nacos服務的地址 namespace: dev group: NACOS_GROUP application: name: nacos-provider #向注冊中心注冊的名字
在dev環境下能夠看到nacos-provider,group為NACOS_GROUP
?在public環境下能夠看到nacos-consumer,group為DEFAULT_GROUP
?進行調用時,找不到數據,前端報500錯誤,后端報“下標越界異常”說明了服務的隔離性 ,只有它們兩個在同一環境下,才能正常的調用
五、Nacos集群和持久化
Nacos默認有自帶嵌入式數據庫derby,但是如果做集群模式的話,就不能使用自己的數據庫不然每個節點一個數據庫,那么數據就不統一了,需要使用外部的mysql
1.持久化
切換數據庫
修改usr/local/nacos/conf/application.properties文件,增加支持mysql數據源配置(目前只支持mysql,版本要求:5.6.5+)
可以在linux圖形化界面中,使用文本編譯器打開
也可以使linux命令打開
[root@localhost bin]# cd /usr/local/nacos
[root@localhost nacos]# cd conf
[root@localhost conf]# vim application.properties
?進到application.properties文件的編輯頁面,找到下圖中所圈的內容,將注釋“#”刪掉
?并將第三個框中的內容進行修改,修改為自己的mysql數據庫所在的ip地址,用戶名和密碼也要修改為自己的mysql數據庫的用戶和密碼,如下圖所示:
?修改完成后,保存并退出,重啟nacos;
初始化數據庫
?找到nacos-mysql.sql文件,將nacos-mysql.sql文件導入到數據庫中;
新建配置文件:將Data ID、Group以及配置內容和配置格式填好并保持:
?打開nacos數據庫,查看config_info表,就能看到剛新創建的配置文件的數據了
2.集群
集群搭建
1.在usr/local/nacos中找到conf/cluster.conf.example ,將其改名為 conf/cluster.conf ,并將內容改為如下:
這里ip地址之所以一樣,是因為在同一臺服務器linux上部署了三個nacos,是為了節省空間,真實的部署是分別部署在三臺服務器上,ip地址各不相同;
# ip:port
192.168.238.132:8848
192.168.238.132:8849
192.168.238.132:8850
也可以通過linux命令找并修改:
[root@localhost ~]# cd /usr/local/nacos/conf
[root@localhost conf]# cp cluster.conf.example cluster.conf
[root@localhost conf]# vim cluster.conf
2.創建一個nacos_cluster文件夾,復制三份Nacos,并進行命名
[root@localhost ~]# cd /usr/local
[root@localhost local]# mkdir nacos_cluster
[root@localhost local]# cp -r nacos nacos_cluster/nacos_8848
[root@localhost local]# cp -r nacos nacos_cluster/nacos_8849
[root@localhost local]# cp -r nacos nacos_cluster/nacos_8850
3.分別進到上邊復制并重新命名的三個文件夾中將conf/appplication.properties中的端口號分別改為,因為有一個是端口是8845,是默認的,所以不用修改:
[root@localhost ~]# vim /usr/local/nacos_cluster/nacos_8849/conf/application.properties:
server.port=8849
[root@localhost ~]# vim /usr/local/nacos_cluster/nacos_8850/conf/application.properties:
server.port=8850
4.分別啟動三個nacos
[root@localhost upload]# cd /usr/local/nacos_cluster/nacos_8848/bin
[root@localhost bin]# ./startup.sh
[root@localhost bin]# cd /usr/local/nacos_cluster/nacos_8849/bin
[root@localhost bin]# ./startup.sh
[root@localhost bin]# cd /usr/local/nacos_cluster/nacos_8850/bin
[root@localhost bin]# ./startup.sh
5.分別在瀏覽器上訪問三個nacos
http://192.168.238.132:8848/nacos
http://192.168.238.132:8849/nacos
http://192.168.238.132:8850/nacos
6.啟動一個服務,注冊進去,進行測試,可以看到能夠在三個nacos服務中顯示出來,這里只截取一個圖進行顯示
7.隨機選擇一個nacos查看“節點列表”:
?8.點開“節點元數據”,可以根據里面的內容判斷哪個是“老大”;
老大的作用:是進行數據的同步,當老大死了,也就是掛了,就會推出來一個新的老大,是根據“投票機制”選出老大
?
?配置代理服務
?1.安裝nginx的依賴庫(c語言環境)
[root@localhost ~]# yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
2.下載nginx
[root@localhost ~]# cd /usr/upload
[root@localhost upload]# wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
3.解壓安裝包
[root@localhost upload]# tar -zxvf nginx-1.12.0.tar.gz
4. 配置安裝路徑
[root@localhost upload]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx
5.編譯并安裝
[root@localhost nginx-1.12.0]# make && make install
6.配置nginx代理nacos
首先找到nginx.conf文件,并打開進行修改
[root@localhost nginx-1.12.0]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf
7.將圖中圈中的地方替換為:
location / {
proxy_pass http://nacos;
}
8.在圖中圈中的上方添加以下內容:
upstream nacos {
server 192.168.238.132:8848;
server 192.168.238.132:8849;
server 192.168.238.132:8850;
}
9.修改后為下圖所示:
?10.nginx的命令
[root@localhost conf]# cd ..
[root@localhost nginx]# cd sbin/
[root@localhost sbin]# ./nginx #啟動
[root@localhost sbin]# ./nginx -s stop #關閉
[root@localhost sbin]# ./nginx -s reload #重啟
11.啟動nginx后,同時也要保持nacos集群的啟動,這時啟動一個服務進行測試
要啟動的服務需要對application.yml進行改動,將端口號去掉
server:
port: 9090
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.238.132 #nacos服務的地址
application:
name: nacos-provider #向注冊中心注冊的名字
在服務啟動后,隨機訪問一個nacos:http://192.168.238.132/nacos/ 可以看到網址中的端口號已經沒有了,測試結果如下:
?
?六、Nacos開機啟動
這里的開機啟動是指:當打開安裝的有nacos的linx系統時,nacos它會自動啟動,不用人為啟動,它啟動的是單機啟動,不是集群啟動,主要是方便日常的使用。
1.添加nacos.service文件
[root@localhost ~]# vim /lib/systemd/system/nacos.service
2.在文件中添加以下內容:
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3.修改nacos的starup.sh文件
[root@localhost ~]# vim /usr/local/nacos/bin/startup.sh
?將下面內容直接復制到里面
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk1.8.0_191
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
#[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
4.設置開機自起
[root@localhost ~]# systemctl start nacos.service #啟動nacos服務
[root@localhost ~]# systemctl daemon-reload #重新加載服務配置
[root@localhost ~]# systemctl enable nacos.service #設置為開機啟動
如有錯誤請私聊或評論指正!!!
原文鏈接:https://blog.csdn.net/weixin_53390559/article/details/126323688
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-12-23 swift指針及內存管理內存綁定實例詳解_Swift
- 2022-07-09 C#中的WebRequest與WebResponse抽象類、DNS靜態類、Ping類介紹_C#教程
- 2022-03-25 .NET微服務架構CI/CD鏡像自動分發_實用技巧
- 2023-06-16 Python中ArcPy柵格裁剪柵格(批量對齊柵格圖像范圍并統一行數與列數)_python
- 2022-05-04 ?分享Python?中的?7?種交叉驗證方法_python
- 2022-07-22 CSS3:盒陰影、邊界圖片、指定每一個圓角、背景、過度、動畫、
- 2024-02-16 SpringBoot 攔截器Intercepto的創建與基本使用
- 2022-08-16 C/C++函數的調用約定的使用_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支