Maison >Java >javaDidacticiel >Comment résoudre le problème selon lequel @Value de SpringBoot obtient une configuration application.properties non valide
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.
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.
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.
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.
@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!