Créez une application Spring Cloud qui téléverse, télécharge et lit des fichiers depuis Object Storage Service (OSS), puis déployez-la sur Enterprise Distributed Application Service (EDAS) sans modifier le code ni la configuration.
Pourquoi utiliser OSS
OSSOSS est un service de stockage sécurisé, économique et hautement fiable développé par Alibaba Cloud. Il vous permet de stocker de grandes quantités de données dans le cloud. OSS propose des opérations d'API RESTful indépendantes de la plateforme, ce qui signifie que vous pouvez stocker et accéder à tous les types de données dans les applications développées avec Spring Cloud.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un compte Alibaba Cloud avec OSS activé
Un bucket OSS
Une paire de clés AccessKey (AccessKey ID et AccessKey secret) obtenue depuis la page Security Management
L'endpoint OSS correspondant à la région de votre bucket (voir Regions and endpoints)
JDK 8 ou version ultérieure et Maven installés localement
Fonctionnement
Spring Cloud AliCloud OSS intègre les applications Spring Cloud à Alibaba Cloud OSS. Après avoir ajouté la dépendance starter et configuré vos identifiants, vous pouvez :
Injecter un client
OSSdirectement dans vos beans SpringAccéder aux objets OSS en tant qu'instances Spring
Resourceen utilisant@Value("oss://...")Déployer la même application sur EDAS sans modifier le code ni la configuration
Configurer le projet Maven
Créez un projet Maven nommé
oss-example.-
Ajoutez les dépendances suivantes au fichier
pom.xml:Spring Boot 1.x a atteint sa fin de vie. Si vous devez absolument utiliser Spring Boot 1.x, utilisez la version 1.5.x avec Spring Cloud Edgware et 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> Créez un package nommé
spring.cloud.alicloud.osssoussrc/main/java.
Créer le point d'entrée de l'application
Créez la classe de démarrage OssApplication dans le package spring.cloud.alicloud.oss. Au démarrage, cette classe vérifie si le bucket cible existe et le crée si nécessaire.
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);
}
}
}
}
Ajouter un exemple de fichier
Créez un fichier nommé oss-test.json dans src/main/resources :
{
"name": "oss-test"
}
Créer le contrôleur REST
Créez OssController dans le package spring.cloud.alicloud.oss. Ce contrôleur expose trois endpoints pour le téléversement, le téléchargement et la lecture de fichiers via l'interface Spring Resource.
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();
}
}
}
Résumé des endpoints :
| Endpoint | Méthode | Description |
|---|---|---|
/upload |
GET | Téléverse oss-test.json depuis le classpath vers votre bucket OSS |
/file-resource |
GET | Lit le fichier depuis OSS via l'abstraction Resource de Spring (@Value("oss://...")) |
/download |
GET | Récupère le fichier directement via le client OSS |
Configurer les identifiants et l'endpoint
Obtenez votre AccessKey ID et votre AccessKey secret depuis la page Security Management.
Obtenez l'endpoint correspondant à la région de votre bucket. Voir Regions and endpoints.
-
Créez le fichier
application.propertiesdanssrc/main/resources. Remplacez les espaces réservés suivants par vos valeurs réelles :Espace réservé Description Exemple <your-access-key>AccessKey ID LTAI5tXxx<your-secret-key>AccessKey secret xXxXxXx<your-endpoint>Préfixe de l'endpoint régional 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=*
Vérifier le résultat
Exécutez la méthode
maindeOssApplicationpour démarrer le service.Ouvrez
http://127.0.0.1:18084/uploaddans votre navigateur. Si le messageupload successs'affiche, le fichier a bien été téléversé.Vérifiez dans la console OSS : accédez à votre bucket, cliquez sur Files dans le volet de navigation de gauche, et confirmez que
oss-test.jsonapparaît dans la liste des fichiers.-
Ouvrez
http://127.0.0.1:18084/downloadpour télécharger le fichier. Le résultat attendu est :{ "name": "oss-test" } -
Ouvrez
http://127.0.0.1:18084/file-resourcepour lire le fichier via l'interface Spring Resource. Le résultat attendu est :{ "name": "oss-test" }
Si une étape échoue, consultez les journaux de la console pour identifier les erreurs, corrigez le problème et redémarrez l'application.
Déployer sur EDAS
Spring Cloud AliCloud OSS est conçu pour répondre aux besoins de migration des applications depuis leurs environnements de développement d'origine vers EDAS. Déployez votre application sans modifier le code ni la configuration.
Pour les étapes de déploiement, voir :
Référence de configuration
| Propriété | Description | Exemple |
|---|---|---|
spring.cloud.alicloud.access-key |
AccessKey ID pour l'authentification | LTAI5tXxx |
spring.cloud.alicloud.secret-key |
AccessKey secret pour l'authentification | xXxXxXx |
spring.cloud.alicloud.oss.endpoint |
Endpoint régional OSS | oss-cn-hangzhou.aliyuncs.com |
server.port |
Port de l'application | 18084 |
spring.application.name |
Nom de l'application Spring | oss-example |