Spring Cloud 是建立在 Spring Boot之上,提供一套微服務的解決方法,他提供許多的工具讓使用者能快速搭建分布式系統,並做到常用的服務註冊、配置管理、融斷器、監控、負載均衡等功能,因為利用 Spring Boot的開發風格,因此在部署和設定上都相當淺顯易懂。
1. 支持Rest
2. 高可用性、高融錯性
3. 學習曲線較低
服務中心 Spring Cloud Netflix Eureka
融斷器 Spring Cloud Netflix Hystrix
服務閘道器 Spring Cloud Netflix Zuul
配置中心 Spring Cloud Config
服務跟蹤、日志收集 Spring Cloud Sleuth
訊息匯流排 Spring Cloud Bus
資料流 Spring Cloud Stream
批量任務 Spring Cloud Task
1. 在pom檔中引入spring-cloud的pom,並引入spring-cloud-gcp-starter-storage
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>${spring-cloud-gcp.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-storage</artifactId>
</dependency>
</dependencies>
2. 在application.properties中,新增GCS的bucket名稱、下載GCS的存取憑證、Oauth所需的相關scope
#spring cloud gcp
spring.cloud.gcp.project-id=your-GCP-bucket-name
spring.cloud.gcp.credentials.location=your-credential-path
spring.cloud.gcp.credentials.scopes=DEFAULT_SCOPES,www.googleapis.com/auth/devstorage.read_write
3. Spring會自動生成GCS的Bean,使用Autowired就可以直接存取
@Autowired
private Storage storage;
4. 上傳單一檔案
BlobId id = BlobId.fromGsUtilUri("gs://yout-bucket-name/file-path");
BlobInfo info = BlobInfo.newBuilder(id).setContentType("your-file-mime-type").build();
storage.create(info, filebytes);
5. 取得單一檔案
BlobId id = BlobId.fromGsUtilUri("gs://yout-bucket-name/file-path");
Byte[] byteArray = storage.readAllBytes(id);
6. 刪除單一檔案
BlobId id = BlobId.fromGsUtilUri("gs://yout-bucket-name/file-path");
storage.delete(id);
7. 複製單一檔案
BlobId sourceId = BlobId.fromGsUtilUri("gs://yout-bucket-name/source-path");
BlobId targetId = BlobId.fromGsUtilUri("gs://yout-bucket-name/target-path");
CopyRequest request = CopyRequest.newBuilder().setSource(sourceId).setTarget(targetId).build();
CopyWriter copyWriter = storage.copy(request);
while (!copyWriter.isDone()) {
copyWriter.copyChunk();
}
copyWriter.getResult();