Читать docker переменную env внутри Spring application.yaml - PullRequest
0 голосов
/ 20 марта 2020

Я устанавливаю переменную окружения в моем файле docker -compose.yaml и хочу использовать значение этой переменной в application.yaml моего Spring Boot. Мне сказали, что в моем приложении Spring.yaml выполняется что-то вроде

app:
  auth:
    tokenSecret: tokensecretvaluehere
    tokenExpirationMsec: 864000000
  oauth2:
    sso:
      url: ${SSO_URL}

(где SSO_URL определен в моем docker -compose.yaml). Однако это вызывает ошибку, когда я запускаю docker -compose up --build, потому что он не может найти эту переменную (ошибка как: Не удалось разрешить заполнитель SSO_URL в значении "$ {SSO_URL}"). Это пример того, что мой docker -compose.yaml:

api:
    restart: always
    ports:
      - "8080:8080"
    links:
      - redis
      - db
    environment:
      - SERVER_SERVLET_SESSION_COOKIE_DOMAIN=localhost
      - SSO_URL=myvaluehere

Меня попросили не использовать функции System.getenv в Java и вместо этого установить переменную, как указано выше. Оттуда я просто использовал бы аннотацию @Value, чтобы получить ее в своем Java коде, как показано ниже:

@Value("${app.oauth2.sso.url}")
private String ssoUrl;

Это больше application.yaml:

heb:
  togglr:
    jwt:
      secret:
        id: 101
      session:
        seconds: 600
      tokenheader: X-TOGGLR-TOKEN
logging:
  level:
    com:
      heb: debug
    default: debug
  path: logs
server:
  error:
    whitelabel:
      enabled: false
  port: 8080
  servlet:
    context-path: /togglr-api
  use-forward-headers: true
spring:
  application:
    name: togglr_api
  freemarker:
    enabled: false
  groovy:
    template:
      enabled: false
  jmx:
    enabled: false
  main:
    banner-mode: 'off'
  thymeleaf:
    cache: false
  security:
    oauth2:
      client:
        registration:
          github:
            clientId:
            clientSecret:
            redirectUri: 
            scope:
              - user:email
              - read:user
app:
  auth:
    tokenSecret:
    tokenExpirationMsec: 864000000
  oauth2:
    sso:
      url: ${SSO_URL}

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Решением было не использовать символ подчеркивания в имени переменной.

0 голосов
/ 20 марта 2020

Как правило, приложения с весенней загрузкой могут считывать переменные окружения, доступные в контейнере docker. Это указано в документации (см. Пункт 10 в списке в самом начале документа).

Так что проблема может быть в другом месте:

  1. Это может быть опечатка в вопросе, но если вы используете application.yaml в отличие от свойств приложения, то у вас должно быть что-то вроде:
  sso:
    url: ${SSO_URL}
Убедитесь, что переменная env SSO_URL действительно доступна в контейнере даже до запуска приложения весенней загрузки. В java (только для целей отладки) вы можете сделать что-то вроде:
@SpringBootApplication
public class MyApp {
   public static void main(String [] args) {
          System.out.println(System.getenv("SSO_URL"));
          SpringApplication.run(MyApp.class);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...