Maison > Java > javaDidacticiel > Comment résoudre le problème selon lequel @Value de SpringBoot obtient une configuration application.properties non valide

Comment résoudre le problème selon lequel @Value de SpringBoot obtient une configuration application.properties non valide

WBOY
Libérer: 2023-05-16 11:52:05
avant
1561 Les gens l'ont consulté

@Value obtient le problème de configuration application.properties invalide

La raison de l'invalidité est principalement de faire attention aux précautions d'utilisation de @Value :

  • 1 Il ne peut pas être utilisé sur des variables statiques (statiques) ;

  • 2. Il ne peut pas agir sur des constantes (finales) ;

  • 3. Ne peut pas être utilisé dans des classes non enregistrées (besoin d'utiliser @Component, @Configuration, etc.) ; en utilisant une classe avec cet attribut, vous ne pouvez utiliser que @ La méthode Autowired et la nouvelle méthode n'injectera pas automatiquement ces configurations.

  • Ces précautions sont également déterminées par son principe :

Il y a deux processus importants pendant le processus de démarrage de Springboot, comme suit :

1. Scannez et analysez les beans dans le conteneur et enregistrez-les dans le beanFactory Monter, c'est comme enregistrer des informations.

  • 2. Instanciez et initialisez ces beans numérisés.

  • @Value est analysée dans la deuxième étape. BeanPostProcessor définit la méthode d'interface que les utilisateurs peuvent utiliser sur le bean avant et après l'initialisation du bean. L'une de ses classes d'implémentation importantes, AutowiredAnnotationBeanPostProcessor, comme le dit le javadoc, prend en charge la fonction d'injection des annotations @Autowired et @Value dans le bean.

Il existe deux manières suivantes :

resource.test.imageServer=http://image.everest.com
Copier après la connexion

1. Le premier

@Configuration
public class EverestConfig {
 
    @Value("${resource.test.imageServer}")
    private String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
}
Copier après la connexion
2. Le second

@Component
@ConfigurationProperties(prefix = "resource.test")
public class TestUtil {
 
    public String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
    public void setImageServer(String imageServer) {
        this.imageServer = imageServer;
    }
}
Copier après la connexion

Puis injectez-le là où c'est nécessaire

    @Autowired
    private TestUtil testUtil;
 
    @Autowired
    private EverestConfig everestConfig;
 
 
    @GetMapping("getImageServer")
    public String getImageServer() {
        return testUtil.getImageServer();
//        return everestConfig.getImageServer();
    }
Copier après la connexion

@Value pour obtenir la configuration dans application.properties La valeur est Null

@Value("${spring.datasource.url}")

private String url;
Copier après la connexion

La valeur est NULL.

Solution

N'utilisez pas la nouvelle méthode pour créer des objets de classe d'outils (DBUtils), mais utilisez la méthode @Autowired à gérer par springboot. Ajoutez @Component à la classe d'outils et n'ajoutez pas de statique à l'attribut défini. variables.

Voie correcte

@Autowired
private DBUtils jdbc;
  
@Component
public class DBUtils{
    
    @Value("${spring.datasource.url}")
    private String url;
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal