SpringBoot3 整合Docker-Compose的實現(xiàn)步驟
它有什么優(yōu)勢
同樣的約定大于配置,使用docker-compose時寫的配置可以被SpringBoot3自動發(fā)現(xiàn),在使用它時我們可以減少更多的書寫配置,一切由它自動完成,比如常見的mysql,redis等都可以省略配置了,后面有具體的例子
添加依賴
<!-- springboot3 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- docker-compose-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-docker-compose</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- mysql-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
compose推薦配置
注意skip 需要在start_only下才能正常執(zhí)行,不然在start_and_stop模式下應用啟動->啟動容器->關閉容器->關機 ,skip等于無效參數(shù)
spring:
docker:
compose:
profiles:
active: dev # 指定當前運行環(huán)境
enabled: true # 開啟compose
start:
skip: if_running # 如果容器在運行就不再去再啟動了
lifecycle-management: start_only # 這個參數(shù)不會在停機后關閉容器
services:
mysql:
image: 'mysql:latest'
restart: always
environment:
- MYSQL_DATABASE=root
- MYSQL_ROOT_PASSWORD=123456
ports:
- '3306:3306'
profiles:
- dev
labels:
# 特殊參數(shù)特殊處理
org.springframework.boot.jdbc.parameters: useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8&useSSL=false
redis:
image: 'redis:latest'
restart: always
environment:
- 'REDIS_PASSWORD=redis'
ports:
- '6379:6379'
profiles:
- dev
docker-compose生命管理器
org.springframework.boot.docker.compose.lifecycle.DockerComposeLifecycleManager 負責整合后的compose生命管理,包括容器創(chuàng)建,啟動,停止,以及最后的配置自動發(fā)現(xiàn),其中我們需要的配置也在讀取docker-compose.yml后存了下來,
然后在容器啟動完成后隨之發(fā)布事件DockerComposeServicesReadyEvent,在被DockerComposeServiceConnectionsApplicationListener監(jiān)聽到后開始注冊配置
private void registerConnectionDetails(BeanDefinitionRegistry registry, List<RunningService> runningServices) {
// runningServices是前面docker-compose中寫的service
for (RunningService runningService : runningServices) {
DockerComposeConnectionSource source = new DockerComposeConnectionSource(runningService);
// getConnectionDetails獲取`spring.factories`里面注冊的`ConnectionDetailsFactory`具體實現(xiàn)
this.factories.getConnectionDetails(source, false).forEach((connectionDetailsType, connectionDetails) -> {
register(registry, runningService, connectionDetailsType, connectionDetails);
this.factories.getConnectionDetails(connectionDetails, false)
.forEach((adaptedType, adaptedDetails) -> register(registry, runningService, adaptedType,
adaptedDetails));
});
}
};
}
}
最后跟以前的配置自動發(fā)現(xiàn)一樣由org.springframework.boot.autoconfigure.service.connection.ConnectionDetails
這個接口負責,比如其中關于mysql和docker-compose整合的實現(xiàn)類為org.springframework.boot.docker.compose.service.connection.mysql.MySqlJdbcDockerComposeConnectionDetailsFactory
注意事項
skip需要搭配lifecycle-management使用常規(guī)的
environment參數(shù)由SpringBoot自動發(fā)現(xiàn),一些特殊參數(shù),比如mysql連接參數(shù)可以放到labels下面,格式類似于org.springframework.boot.jdbc.parameters,具體的話可以翻看源碼,一般會直接定義在ConnectionDetails實現(xiàn)類里面
到此這篇關于SpringBoot3 整合Docker-Compose的實現(xiàn)步驟的文章就介紹到這了,更多相關SpringBoot3 整合Docker-Compose內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java實現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南
數(shù)據(jù)脫敏是指通過對敏感數(shù)據(jù)進行部分或完全隱藏處理,保護敏感信息在存儲和使用過程中的安全性,常見的應用場景包括日志記錄、接口返回、報表展示、數(shù)據(jù)分析等,本文給大家介紹了Java實現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南,需要的朋友可以參考下2025-02-02
Java多線程生產(chǎn)者消費者模式實現(xiàn)過程解析
這篇文章主要介紹了Java多線程生產(chǎn)者消費者模式實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

