Object Storage Service (OSS) üzerinden dosya yükleyen, indiren ve okuyan bir Spring Cloud uygulaması oluşturun. Kodda veya yapılandırmada herhangi bir değişiklik yapmadan bu uygulamayı Enterprise Distributed Application Service (EDAS) üzerine dağıtın.
Neden OSS kullanmalısınız?
OSS Alibaba Cloud tarafından geliştirilmiştir; güvenli, maliyet etkin ve son derece güvenilir depolama hizmetleri sunar. Büyük miktarda veriyi cloud ortamında saklamanıza olanak tanır. OSS, platformdan bağımsız RESTful API işlemleri sağlar; bu sayede Spring Cloud ile geliştirdiğiniz uygulamalarda her türlü veriyi depolayabilir ve erişebilirsiniz.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
OSS etkinleştirilmiş bir Alibaba Cloud hesabı
Bir OSS paketi
Security Management sayfasından alınan bir AccessKey çifti (AccessKey ID ve AccessKey secret)
Paketinizin bulunduğu bölge için OSS uç noktası (bkz. Bölgeler ve uç noktalar)
Yerel makinenizde yüklü JDK 8 veya üzeri sürüm ve Maven
Nasıl çalışır?
Spring Cloud AliCloud OSS, Spring Cloud uygulamalarını Alibaba Cloud OSS ile entegre eder. Başlangıç bağımlılığını ekleyip kimlik bilgilerinizi yapılandırdıktan sonra şunları yapabilirsiniz:
Bir
OSSistemcisini doğrudan Spring bean'lerinize enjekte edin@Value("oss://...")kullanarak OSS nesnelerine SpringResourceörnekleri olarak erişinAynı uygulamayı kodda veya yapılandırmada değişiklik yapmadan EDAS'a dağıtın
Maven projesini kurma
oss-exampleadlı bir Maven projesi oluşturun.-
Aşağıdaki bağımlılıkları
pom.xmldosyasına ekleyin:Spring Boot 1.x yaşam döngüsünü tamamlamıştır. Spring Boot 1.x kullanmanız gerekiyorsa Spring Cloud Edgware ve Spring Cloud Alibaba 1,5.1.RELEASE ile birlikte 1.5.x sürümünü kullanın.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alicloud-oss</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> src/main/javadizini altındaspring.cloud.alicloud.ossadlı bir paket oluşturun.
Uygulama giriş noktasını oluşturma
spring.cloud.alicloud.oss paketi içinde OssApplication başlatma sınıfını oluşturun. Bu sınıf, başlatma sırasında hedef paketin var olup olmadığını kontrol eder ve gerekirse paketi oluşturur.
package spring.cloud.alicloud.oss;
import com.aliyun.oss.OSS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import java.net.URISyntaxException;
@SpringBootApplication
public class OssApplication {
// Replace with your actual bucket name
public static final String BUCKET_NAME = "test-bucket";
public static void main(String[] args) throws URISyntaxException {
SpringApplication.run(OssApplication.class, args);
}
@Bean
public AppRunner appRunner() {
return new AppRunner();
}
class AppRunner implements ApplicationRunner {
@Autowired
private OSS ossClient;
@Override
public void run(ApplicationArguments args) throws Exception {
try {
if (!ossClient.doesBucketExist(BUCKET_NAME)) {
ossClient.createBucket(BUCKET_NAME);
}
} catch (Exception e) {
System.err.println("oss handle bucket error: " + e.getMessage());
System.exit(-1);
}
}
}
}
Örnek bir dosya ekleme
src/main/resources dizininde oss-test.json adlı bir dosya oluşturun:
{
"name": "oss-test"
}
REST denetleyicisini oluşturma
spring.cloud.alicloud.oss paketi içinde OssController sınıfını oluşturun. Bu denetleyici, Spring Resource arayüzü üzerinden dosya yükleme, indirme ve okuma işlemleri için üç uç nokta sunar.
package spring.cloud.alicloud.oss;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.utils.IOUtils;
import com.aliyun.oss.model.OSSObject;
import org.apache.commons.codec.CharEncoding;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.nio.charset.Charset;
@RestController
public class OssController {
@Autowired
private OSS ossClient;
// Access an OSS object as a Spring Resource
@Value("oss://" + OssApplication.BUCKET_NAME + "/oss-test.json")
private Resource file;
/**
* Uploads oss-test.json from the classpath to the OSS bucket.
*/
@GetMapping("/upload")
public String upload() {
try {
ossClient.putObject(OssApplication.BUCKET_NAME, "oss-test.json", this
.getClass().getClassLoader().getResourceAsStream("oss-test.json"));
} catch (Exception e) {
e.printStackTrace();
return "upload fail: " + e.getMessage();
}
return "upload success";
}
/**
* Reads the OSS object through the Spring Resource interface.
*/
@GetMapping("/file-resource")
public String fileResource() {
try {
return "get file resource success. content: " + StreamUtils.copyToString(
file.getInputStream(), Charset.forName(CharEncoding.UTF_8));
} catch (Exception e) {
e.printStackTrace();
return "get resource fail: " + e.getMessage();
}
}
/**
* Downloads the OSS object directly through the OSS client.
*/
@GetMapping("/download")
public String download() {
try {
OSSObject ossObject = ossClient.getObject(OssApplication.BUCKET_NAME, "oss-test.json");
return "download success, content: " + IOUtils
.readStreamAsString(ossObject.getObjectContent(), CharEncoding.UTF_8);
} catch (Exception e) {
e.printStackTrace();
return "download fail: " + e.getMessage();
}
}
}
Uç nokta özeti:
| Uç Nokta | Yöntem | Açıklama |
|---|---|---|
/upload |
GET | Classpath'ten oss-test.json dosyasını OSS paketinize yükler |
/file-resource |
GET | Dosyayı Spring'in Resource soyutlaması (@Value("oss://...")) üzerinden OSS'den okur |
/download |
GET | Dosyayı doğrudan OSS istemcisi üzerinden alır |
Kimlik bilgilerini ve uç noktayı yapılandırma
AccessKey ID'nizi ve AccessKey secret'ınızı Security Management sayfasından alın.
Paketinizin bulunduğu bölge için uç noktayı edinin. Bkz. Bölgeler ve uç noktalar.
-
src/main/resourcesdizinindeapplication.propertiesdosyasını oluşturun. Aşağıdaki yer tutucuları gerçek değerlerinizle değiştirin:Yer Tutucu Açıklama Örnek <your-access-key>AccessKey ID LTAI5tXxx<your-secret-key>AccessKey secret xXxXxXx<your-endpoint>Bölgesel uç nokta ön eki oss-cn-hangzhouspring.application.name=oss-example server.port=18084 # Replace with your actual credentials and endpoint spring.cloud.alicloud.access-key=<your-access-key> spring.cloud.alicloud.secret-key=<your-secret-key> spring.cloud.alicloud.oss.endpoint=<your-endpoint>.aliyuncs.com management.endpoints.web.exposure.include=*
Sonucu doğrulama
Hizmeti başlatmak için
OssApplicationsınıfınınmainyöntemini çalıştırın.Tarayıcınızda
http://127.0.0.1:18084/uploadadresini açın.upload successmesajı görünürse dosya başarıyla yüklenmiştir.OSS konsolunda doğrulama yapın: Paketinize gidin, sol gezinme bölmesinde Files seçeneğine tıklayın ve dosya listesinde
oss-test.jsondosyasının göründüğünü onaylayın.-
Dosyayı indirmek için
http://127.0.0.1:18084/downloadadresini açın. Beklenen çıktı şöyledir:{ "name": "oss-test" } -
Dosyayı Spring Resource arayüzü üzerinden okumak için
http://127.0.0.1:18084/file-resourceadresini açın. Beklenen çıktı şöyledir:{ "name": "oss-test" }
Herhangi bir adım başarısız olursa hata ayıklamak için konsol günlüklerini kontrol edin, sorunu düzeltin ve uygulamayı yeniden başlatın.
EDAS'a dağıtma
Spring Cloud AliCloud OSS, uygulamaları orijinal geliştirme ortamlarından EDAS'a geçirme ihtiyaçlarına yanıt vermek üzere geliştirilmiştir. Uygulamanızı kodda veya yapılandırmada değişiklik yapmadan dağıtın.
Dağıtım adımları için bkz.:
Yapılandırma referansı
| Özellik | Açıklama | Örnek |
|---|---|---|
spring.cloud.alicloud.access-key |
Kimlik doğrulama için AccessKey ID | LTAI5tXxx |
spring.cloud.alicloud.secret-key |
Kimlik doğrulama için AccessKey secret | xXxXxXx |
spring.cloud.alicloud.oss.endpoint |
OSS bölgesel uç noktası | oss-cn-hangzhou.aliyuncs.com |
server.port |
Uygulama bağlantı noktası | 18084 |
spring.application.name |
Spring uygulama adı | oss-example |