0

Je développe une application Spring Boot, fonctionnant sous AWS. J'ai installé le démarreur AWS de Spring Cloud, mais lorsque j'essaie d'exécuter des tests d'intégration localement, sur mon ordinateur portable, j'ai cette erreur.Comment puis-je exécuter mes tests d'intégration localement sur une application Spring Boot exécutée sur AWS?

Erreur de création de haricot avec le nom « org.springframework.cloud.aws.context.support.io.ResourceLoaderBeanPostProcessor # 0 »: Impossible de résoudre la référence au haricot « amazonS3 » tout en mettant en argument du constructeur; l'exception imbriquée est org.springframework.beans.factory.BeanCreationException: Erreur lors de la création du bean avec le nom 'amazonS3': L'appel de la méthode init a échoué; L'exception imbriquée est java.lang.IllegalStateException: Il n'y a pas de méta-données EC2 disponibles, car l'application n'est pas en cours d'exécution dans l'environnement EC2. La détection de région n'est possible que si l'application est exécutée sur une instance EC2

Existe-t-il un moyen d'exécuter mon application sans AWS? Uniquement pour les tests d'intégration locale.

+1

Si vous exécutez votre application hors de l'environnement AWS. Pour éviter cette erreur, spécifiez le manuel régional dans le fichier application.properties comme suit: cloud.aws.region.static = eu-west-1' – GVArt

+0

Cela a résolu mon problème. – abierto

Répondre

0

Envisagez d'ajouter de fausses implémentations de vos classes, qui utilisent une API externe. Vous pouvez les utiliser uniquement dans le profil de test. Par exemple:

@Component 
@Profile("default") 
public class FakePhotosUploader implements Photos { 

    @Override 
    public String uploadPhoto(byte[] bytes, String name, Integer receiptId) { 
    return UUID.randomUUID().toString(); 
    //you can write here some implementation, suitable for your tests 

    } 
} 

Et vous pouvez désactiver SSFE profil par défaut.

Ainsi, AWS ne serait pas utilisé. Il ne suffit pas d'injecter AmazonS3 dans les beans du profil par défaut et il ne sera pas créé.

J'espère avoir bien compris votre question.