Cree una aplicación Spring Cloud que cargue, descargue y lea archivos desde Object Storage Service (OSS) y, posteriormente, despliéguela en Enterprise Distributed Application Service (EDAS) sin modificar el código ni la configuración.
Ventajas de usar OSS
OSSOSS es un servicio desarrollado por Alibaba Cloud para ofrecer almacenamiento seguro, rentable y altamente confiable. Este servicio permite almacenar grandes volúmenes de datos en la nube. OSS proporciona operaciones de API RESTful independientes de la plataforma, lo que facilita el almacenamiento y acceso a todo tipo de datos en aplicaciones desarrolladas con Spring Cloud.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una cuenta de Alibaba Cloud con OSS activated
Un OSS bucket
Un par de AccessKey (AccessKey ID y AccessKey secret) obtenido en la página de Security Management
El endpoint de OSS correspondiente a la región de su bucket (consulte Regions and endpoints)
JDK 8 o posterior y Maven instalados localmente
Funcionamiento
Spring Cloud AliCloud OSS integra las aplicaciones Spring Cloud con Alibaba Cloud OSS. Una vez que agrega la dependencia del starter y configura sus credenciales, puede realizar lo siguiente:
Inyectar un cliente
OSSdirectamente en sus beans de SpringAcceder a los objetos de OSS como instancias de
Resourcede Spring mediante@Value("oss://...")Desplegar la misma aplicación en EDAS sin modificar el código ni la configuración
Configuración del proyecto Maven
Cree un proyecto Maven llamado
oss-example.-
Agregue las siguientes dependencias al archivo
pom.xml:Spring Boot 1.x ha llegado al final de su ciclo de vida. Si necesita utilizar Spring Boot 1.x, use la versión 1.5.x junto con Spring Cloud Edgware y Spring Cloud Alibaba 1.5.1.RELEASE.
<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> Cree un paquete denominado
spring.cloud.alicloud.ossdentro desrc/main/java.
Creación del punto de entrada de la aplicación
Cree la clase de inicio OssApplication en el paquete spring.cloud.alicloud.oss. Al iniciarse, esta clase comprueba si el bucket de destino existe y lo crea en caso necesario.
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);
}
}
}
}
Adición de un archivo de ejemplo
Cree un archivo llamado oss-test.json en src/main/resources:
{
"name": "oss-test"
}
Creación del controlador REST
Cree la clase OssController en el paquete spring.cloud.alicloud.oss. Este controlador expone tres endpoints para cargar, descargar y leer archivos a través de la interfaz Resource de Spring.
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();
}
}
}
Resumen de endpoints:
|
Endpoint |
Método |
Descripción |
|
|
GET |
Carga |
|
|
GET |
Lee el archivo desde OSS mediante la abstracción |
|
|
GET |
Recupera el archivo directamente a través del cliente |
Configuración de credenciales y endpoint
Obtenga su AccessKey ID y AccessKey secret en la página de Security Management.
Obtenga el endpoint correspondiente a la región de su bucket. Consulte Regions and endpoints.
-
Cree el archivo
application.propertiesensrc/main/resources: Reemplace los siguientes marcadores de posición con sus valores reales:Marcador de posición
Descripción
Ejemplo
<your-access-key>AccessKey ID
LTAI5tXxx<your-secret-key>AccessKey secret
xXxXxXx<your-endpoint>Prefijo del endpoint regional
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=*
Comprobación del resultado
Ejecute el método
maindeOssApplicationpara iniciar el servicio.Abra
http://127.0.0.1:18084/uploaden su navegador. Si aparece el mensajeupload success, significa que el archivo se cargó correctamente.Verifíquelo en la consola de OSS: vaya a su bucket, haga clic en Files en el panel de navegación izquierdo y confirme que
oss-test.jsonaparece en la lista de archivos.-
Abra
http://127.0.0.1:18084/downloadpara descargar el archivo. La salida esperada es:{ "name": "oss-test" } -
Abra
http://127.0.0.1:18084/file-resourcepara leer el archivo mediante la interfaz Resource de Spring. La salida esperada es:{ "name": "oss-test" }
Si algún paso falla, revise los registros de la consola en busca de errores, corrija el problema y reinicie la aplicación.
Despliegue en EDAS
Spring Cloud AliCloud OSS se diseñó para cubrir la necesidad de migrar aplicaciones desde sus entornos de desarrollo originales hacia EDAS. Despliegue su aplicación sin tener que modificar el código ni la configuración.
Para consultar los pasos de despliegue, consulte:
Referencia de configuración
|
Propiedad |
Descripción |
Ejemplo |
|
|
AccessKey ID para autenticación |
|
|
|
AccessKey secret para autenticación |
|
|
|
Endpoint regional de OSS |
|
|
|
Puerto de la aplicación |
|
|
|
Nombre de la aplicación Spring |
|