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
WBOYavant
2023-05-16 11:52:051551parcourir

@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

1. Le premier

@Configuration
public class EverestConfig {
 
    @Value("${resource.test.imageServer}")
    private String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
}
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;
    }
}

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();
    }

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

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

private String url;

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;
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer