2017-10-20 31 views
1

J'utilise spring boot avec un accès à keycloak. Je dois quitter la configuration keycloak dans le fichier keycloak.json Je voudrais obtenir teh des valeurs de l'JSON en utilisant l'annotation PropertySource ...Configuration des propriétés des ressorts à l'aide de @PropertySource avec fichier JSON externe

Mon application.yml

keycloak: 
    configurationFile: "classpath:keycloak.json" 

Mon keycloak.json

{ 
    "realm": "MyRealm", 
    "auth-server-url": "https://keycloakURL", 
.... 
} 

Ma classe

@Controller 
@Configuration 
@PropertySource("classpath:keycloak.json") 
public class MyClass{ 

@Autowired 
private Environment env; 

@RequestMapping(value = "/mycontroller", method = RequestMethod.GET) 
    public String method(Model model) { 
    env.getProperty("auth-server-url") 
} 

Le problème est que je suis gettin g null pour cette variable d'environnement

+0

Exécuter en debug, mettez un point d'arrêt sur env.getProperty, puis regardez les sources de propriété sur env et voir si vous avez quoi que ce soit dans la source pour keycloak.json comme point de départ. – PaulNUK

+0

Copie possible de [Charger les propriétés spring-boot du fichier json] (https://stackoverflow.com/questions/44564166/load-spring-boot-properties-from-json-file) – araknoid

+0

J'ai les variables d'environnement dans l'application .yml qui est classpath: keycloak.json mais pas le contenu du fichier keycloak.json – testeurFou

Répondre

0

Si env est nul, le problème est peut-être lié à l'importation.

org.springframework.core.env.Environment

Sinon, si la valeur recherchée de l'environnement est vide. En application de démarrage de printemps, la configuration du fichier JSON en tant que propriété est tout à fait différente s'il vous plaît se référer à la Example 1, Example 2

0

Je sais que l'aide @Value est un peu découragée en faveur de env.getProperty(), mais je trouve l'ancien beaucoup plus fiable et simple. La bonne façon d'utiliser @Value d'un PropertySource est décrit dans mkyong's great tutorial

Pour résoudre $ {} dans @Values, vous devez enregistrer un PropertySourcesPlaceholderConfigurer statique dans XML ou l'annotation fichier de configuration.

+0

J'ai essayé ce que vous avez dit à propos de @value. @Value ("$ {keycloak.configurationFile}") private String authServerUrl; Retours "classpath: keycloak.json" \t \t \t @Value ("$ {auth-server-url}") \t private String authServerUrl; \t printemps ne commencera pas .. – testeurFou

+0

@testeurFou Il devrait être '@PropertySource ("classpath: keycloak.json") public class MyClass { @Value ("$ {auth-server-url}") private String authServerUrl ; } ' – maaw

+0

@testeurFou aussi je ne connais pas' @ Controller' et '@ Configuration' dans le même fichier. À tout le moins (et en supposant que cela fonctionne), il est recommandé de les garder séparés. – maaw