2017-10-04 4 views
2

Besoin d'aide, où est le problème?@Valeur ne fonctionne pas au printemps @Configuration

J'ai une classe de configuration qui est des propriétés de chargement comme

WebConfig.java

@Configuration 
@PropertySource(value={"classpath:application.properties"}) 
class WebConfig extends WebMvcConfigurerAdapter{ 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

J'ai une autre classe de configuration où je suis en train d'utiliser les propriétés comme

MyServerConfig .java

@Configuration 
class MyServerConfig { 

    @Value("${server.url}") 
    private String url; 
... 
} 

application.properties

server.url=http://localhost:8080/test/abc 

Mais obtenir:

java.lang.IllegalArgumentException: Impossible de résoudre l'espace réservé 'server.url'.

Vous ne savez pas ce qui manque ici? Des pensées?

+1

Pourquoi avez-vous créé la méthode 'propertySourcesPlaceholderConfigurer' dans la classe' WebConfig' 'static'? – Jesper

+0

Pouvez-vous poster votre fichier configure ** application.properties **. –

+0

@Jesper Juste essayer l'une des solutions que j'ai trouvé dans google, et il ne fonctionne pas même si vous supprimez l'électricité statique ou supprimez complètement la méthode –

Répondre

3

Utilisez l'annotation @PropertyScan dans la classe où une propriété sera utilisée:

@Configuration 
@PropertySource("classpath:application.properties") 
class MyServerConfig { 

    @Value("${server.url}") 
    private String url; 
} 
+0

Déjà essayé! Ne travaille pas pour moi. –

+0

Une erreur? "Ne pas travailler pour moi" ne m'aide pas non plus à trouver la solution qui vous convient. –

+0

Et il ne fonctionne tout simplement pas ici, alors que d'une manière similaire, il fonctionne dans la classe @Service –

0

Pour obtenir les valeurs de vos @Value variables, le application.properties n'est pas nécessaire d'être configuré d'une manière particulière, car ce fichier est toujours scanné. Supprimez donc l'annotation @PropertySource et le haricot PropertySourcesPlaceholderConfigurer.

Elles sont utilisées si vous souhaitez ajouter d'autres fichiers .properties (par exemple constants.properties, db-config.properties).

Il suffit donc de retirer les et essayez d'exécuter votre application à nouveau

Très important:

  1. Assurez-vous numérisez la classe qui utilise l'annotation @Value (Si votre BootApplication est en quelque paquet au lieu du paquet 'principal', ajoutez l'annotation @SpringBootApplication(scanBasePackages = { "com.my.project" }) appropriée).

  2. Assurez-vous que votre application.properties est sur vous ClassPath

Bonus Si vous utilisez des profils de ressort (par exemple: prod, dev), vous pouvez aussi avoir application-prod.properties et application-dev.properties fichiers qui seront scannés et inclus en fonction du profil que vous utilisez.