Topik ini menjelaskan cara mengimplementasikan fitur Object Storage Service (OSS) dalam aplikasi Spring Cloud lokal dan menerapkan aplikasi tersebut ke Enterprise Distributed Application Service (EDAS).
Mengapa OSS digunakan?
OSS dikembangkan oleh Alibaba Cloud untuk menyediakan layanan penyimpanan yang aman, hemat biaya, dan sangat andal. OSS memungkinkan Anda menyimpan sejumlah besar data di cloud serta menyediakan API operasi RESTful yang independen dari platform, sehingga Anda dapat menyimpan dan mengakses berbagai jenis data dalam aplikasi yang dibuat menggunakan Spring Cloud.
Prasyarat
Sebelum mengimplementasikan fitur OSS dalam aplikasi, buat bucket di OSS menggunakan akun Alibaba Cloud Anda.
Implementasikan fitur OSS dalam lingkungan lokal
Buat proyek Maven bernama
oss-example.Tambahkan dependensi berikut ke file
pom.xml:Dalam kode sampel berikut, Spring Boot 2.1.4.RELEASE dan Spring Cloud Greenwich.SR1 ditambahkan sebagai dependensi.
<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>CatatanJika Anda harus menggunakan Spring Boot 1.x, disarankan untuk menggunakan Spring Boot 1.5.x dan Spring Cloud Edgware. Versi yang sesuai dari Spring Cloud Alibaba adalah 1.5.1.RELEASE.
Spring Boot 1.x telah mencapai akhir masa pakai. Oleh karena itu, disarankan untuk menggunakan versi Spring Boot yang lebih baru untuk mengembangkan aplikasi Anda.
Buat paket seperti
spring.cloud.alicloud.ossdi direktorisrc/main/java.Buat kelas startup bernama
OssApplicationuntukoss-exampledi paketspring.cloud.alicloud.oss.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 { 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); } } } }Di direktori
src/main/resources, tambahkan file sampel yang akan diunggah. File sampel tersebut diberi namaoss-test.jsondalam contoh ini.{ "name": "oss-test" }Buat kelas bernama
OssControllerdi paketspring.cloud.alicloud.ossdan tambahkan konfigurasi untuk mengimplementasikan fitur seperti mendapatkan file menggunakan antarmuka Resource dari Spring, mengunggah data, dan mengunduh data.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; @Value("oss://" + OssApplication.BUCKET_NAME + "/oss-test.json") private Resource file; @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 gagal: " + e.getMessage(); } return "upload berhasil"; } @GetMapping("/file-resource") public String fileResource() { try { return "mendapatkan sumber daya file berhasil. isi: " + StreamUtils.copyToString( file.getInputStream(), Charset.forName(CharEncoding.UTF_8)); } catch (Exception e) { e.printStackTrace(); return "mendapatkan sumber daya gagal: " + e.getMessage(); } } @GetMapping("/download") public String download() { try { OSSObject ossObject = ossClient.getObject(OssApplication.BUCKET_NAME, "oss-test.json"); return "unduh berhasil, isi: " + IOUtils .readStreamAsString(ossObject.getObjectContent(), CharEncoding.UTF_8); } catch (Exception e) { e.printStackTrace(); return "unduh gagal: " + e.getMessage(); } } }Dapatkan ID AccessKey, Rahasia AccessKey, dan titik akhir, lalu tambahkan konfigurasi tersebut di lingkungan lokal Anda.
Pergi ke halaman Manajemen Keamanan dan dapatkan ID AccessKey dan Rahasia AccessKey.
Dapatkan titik akhir berdasarkan wilayah tempat bucket diterapkan. Untuk informasi lebih lanjut, lihat Wilayah dan titik akhir.
Buat file bernama
application.propertiesdi direktorisrc/main/resourcesdan tambahkan konfigurasi untuk ID AccessKey, Rahasia AccessKey, dan titik akhir.spring.application.name=oss-example server.port=18084 # Tentukan ID AccessKey. spring.cloud.alicloud.access-key=xxxxx # Tentukan Rahasia AccessKey. spring.cloud.alicloud.secret-key=xxxxx # Tentukan titik akhir. spring.cloud.alicloud.oss.endpoint=xxx.aliyuncs.com management.endpoints.web.exposure.include=*
Jalankan fungsi utama dari
OssApplicationuntuk memulai layanan.
Verifikasi hasil
Kunjungi http://127.0.0.1:18084/upload di browser web Anda.
Jika
upload berhasilmuncul, file sampeloss-test.jsontelah diunggah. Jika tidak, periksa kode di lingkungan lokal untuk pemecahan masalah, lalu jalankan fungsi utama dariOssApplicationlagi untuk memulai layanan.Masuk ke konsol OSS dan buka bucket yang menyimpan file yang diunggah. Kemudian, di panel navigasi di sebelah kiri, klik Files dan periksa apakah file sampel ada dalam daftar file.
Jika oss-test.json ada dalam daftar file, file tersebut telah diunggah. Jika tidak, periksa kode di lingkungan lokal untuk pemecahan masalah, lalu jalankan fungsi utama dari OssApplication lagi untuk memulai layanan.
Kunjungi http://127.0.0.1:18084/download di browser web Anda untuk mengunduh file oss-test.json.
{ "name": "oss-test" }Kunjungi http://127.0.0.1:18084/file-resource di browser web Anda untuk mendapatkan isi dari file sampel oss-test.json.
{ "name": "oss-test" }
Terapkan aplikasi ke EDAS
Spring Cloud AliCloud OSS dirancang untuk memenuhi kebutuhan migrasi aplikasi dari lingkungan pengembangan aslinya ke EDAS. Anda dapat menerapkan aplikasi ke EDAS tanpa perlu memodifikasi kode atau konfigurasi. Untuk informasi lebih lanjut tentang metode dan langkah-langkah penerapan, lihat Ikhtisar dan Ikhtisar.