Skip to content
This repository has been archived by the owner on Nov 17, 2023. It is now read-only.
/ fp-konfig Public archive

Java/CDI basert bibliotek som forenkler håndtering av app konfigurasjon.

License

Notifications You must be signed in to change notification settings

navikt/fp-konfig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bygg

Quality Gate Status Lines of Code Coverage Bugs Vulnerabilities Security Rating

GitHub release (latest by date) GitHub

fp-konfig

Java/CDI basert bibliotek som brukes til å håndtere app konfigurasjon avhengig av kubernetes cluster og namespace applikasjonen kjører i.

Det er mulig å injecte en spesifikk variable i en konstruktor eller felt ved å bruke @KonfigVerdi annotering.

Bruk

Konfig kilder

Biblioteket leter etter konfig i følgende kilder og bruker første verdi fra kilden hvor den finnes.

Prioriteten på kilder er som følge:

  • Applikasjons properties med cluster og namespace (application-prod-fss-default.properties)
  • Applikasjons properties med cluster (application-prod-fss.properties)
  • Applikasjons properties (application.properties)
  • Miljø variabler (generelt alt som finnes i System.getenv())
  • System properties (generelt alt som finnes i System.getProperties())

For kjøring utenfor kubernetes f.eks. fra IDE defaultes cluster navn til "local" og namespace til verdi satt i System.getProperty("app.name"); Dvs at man kan nå properties under application.properties, application-lokal.properties og application-lokal-<app.name>.properties

Det er mulig å plugge inn en egen provider ved å implementere PropertiesKonfigVerdiProvider klassen.

Løsningen er CDI basert.

Bruk av @KonfigVerdi

Det er mulig å direkte @Injecte konfig som trenger ved å bruke @KonfigVerdi annotering i konstruktor eller direkte på et attribut. Minimum oppsett:

  • @KonfigVerdi(value = "min.property") String minProperty
  • @KonfigVerdi(value = "min.property", required=false) String minProperty - kaster ikke exception om verdien ikke finnes.
  • @KonfigVerdi(value = "min.property", defaultVeidi="default konfig verdi") String minProperty - returnerer default verdi om verdien ikke finnes i konfig.
  •   @KonfigVerdi(value = "min.property")
      private String minProperty
    
    

Det er mulig å hente konfig direkte fra koden ved å kalle getProperty eller getRequiredProperty fra Environment klassen:

  • Environment.current().getProperty("min.property") - returnerer en String eller null om det ikke finnes.
  • Environment.current().getProperty("min.property", Integer.class) - returnerer en Integer, null om det ikke finnes eller Exception om ikke integer.
  • Environment.current().getRequiredProperty("min.property") - returnerer en String, eller Exception om verdien ikke finnes.

Følgende typer støttes og kan bli returnert:

  • String (default)
  • Boolean / boolean
  • Integer / int
  • Period
  • Duration
  • LocalDate
  • Long
  • URI
  • URL

Bruk eksempler

  • @KonfigVerdi(value = "test.enabled", required = false) boolean enabled == Environment.current().getProperty("test.enabled", integer.class)
  • @KonfigVerdi(value = "bruker.navn" String bruker == Environment.current().getProperty("bruker.navn")
  • @KonfigVerdi(value = "periode.fp") Period periode == Environment.current().getProperty("periode.fp", Period.class)
  • @KonfigVerdi(value = HENDELSE_BASE_ENDPOINT, defaultValue=DEFAULT_BASE_ENDPOINT) URI baseEndpoint == Environment.current().getProperty(HENDELSE_BASE_ENDPOINT, URI.class, DEFAULT_BASE_ENDPOINT)

Utilities

  • Environment - statisk klasse som gir informasjon om miljøet appen kjører i.
  • Cluster - statisk klasse med info om clusteret appen kjører i f.eks: isProd(), isDev(), isLocal(), etc.
  • Namespace - statisk klasse som leverer egenskaper om namespacet appen kjører i f.eks: getName()
  • Application - statisk klasse som leverer injisert navn på applikasjon: getName()
  • ClienId - statisk klasse som leverer egenskaper om clientId for appen: getClientId()

Lisens

MIT