Приложение Springboot неправильно получает значение из свойств Spring Config Server

У меня есть небольшая проблема, и я действительно не знаю, почему это происходит

@RefreshScope
@Configuration
@Getter
public class ConfigProperties {

   @Value("${receipts.Application}")
   private String application;
   @Value("${receipts.ApplicationIdMT}")
   private String applicationIdMT;
   @Value("${receipts.IdComercioMT}")
   private String idComercioMT;
   //more properties
}

у меня есть этот класс конфигурации, я получаю значения из application.yml, этот файл находится в репозитории git, потому что мой проект использует сервер конфигурации для получения значений

мой application.yml в репозитории git выглядит так:

receipts:
   Application: NAVERU
   ApplicationIdMT: b96f9c62-e6a
   IdComercioMT: 02500000012
   //more properties

когда я получаю значения, происходит что-то странное, пример моего класса:

   //logic and imports....
   public class ClientBase {

       @Autowired
       protected ConfigProperties configProperties;

       public void printValues(){

       String application= configProperties.getApplication();
       String applicationIdMT= configProperties.getApplicationIdMT();
       String idComercioMT= configProperties.getIdComercioMT();
       System.out.println("aplication: "+application);
       System.out.println("idMt: "+applicationIdMT);
       System.out.println("idComerceMt: "+idComercioMT);
       }
       
  }

И когда я вижу значения в консоли:

     aplication: NAVERU
     idMt: b96f9c62-e6a
     idComerceMt: 352321546

я не понимаю, почему idComerceMt имеет это значение, потому что, как я показываю, реальное значение равно 02500000012


person Juan Sanchez    schedule 12.03.2021    source источник
comment
похоже, что-то где-то закешировалось и еще не обновлено. Вы работаете из IDE или из инструмента сборки?   -  person Rob Evans    schedule 13.03.2021
comment
Как упомянул @RobEvans, похоже, что он где-то кэшируется. Попробуйте изменить значение в GIT для тех, которые кажутся правильными, и запустите тест, если он показывает старое значение, это означает, что ваша программа читает кэшированные данные. Какой бы редактор вы ни использовали, попробуйте перезапустить его или перезапустить приложение, чтобы увидеть обновленное значение.   -  person Amit    schedule 13.03.2021
comment
Посмотрите, сможете ли вы отладить, откуда ConfigProperties на самом деле получает свойства.   -  person Rob Evans    schedule 13.03.2021
comment
@RobEvans Я использую свою IDE в своей локальной среде, я очищаю проект, перезапускаю свою IDE, перезапускаю сервер конфигурации и проект с этой проблемой, я вижу, что если я добавлю новые свойства в репозиторий git, я получу правильное значение, но когда свойство является буквенно-цифровым или строковым, но с такими числами, как 00221511... и т. д., я получаю неправильные значения:/   -  person Juan Sanchez    schedule 13.03.2021


Ответы (2)


Проблема в том, что значение IdComercioMT читается как число, а с префиксом 0 оно анализируется в восьмеричном формате.

02500000012(восьмеричное) = 352321546(десятичное)

Поскольку класс Configuration хочет, чтобы значение было строковым, вы можете легко это исправить, заключив значение в кавычки:

receipts:
   Application: NAVERU
   ApplicationIdMT: b96f9c62-e6a
   IdComercioMT: '02500000012'
   # more properties
person Andreas    schedule 12.03.2021
comment
Спасибо, это действительно решило проблему - person Juan Sanchez; 13.03.2021

Проверьте значения в вашем файле свойств в target\BOOT-INF\classes

person Erion Omeri    schedule 12.03.2021
comment
я не нахожу эту папку, но я ищу в .../AppData\Local\Temp\config-repo-7675019279324585074 (последний сгенерированный), и в ней я вижу все мои приложения.yml из репозитория git, но локальные, и у них есть фактические правильное значение 02500000012, я не знаю, почему, когда я выполняю свой проект, это значение неверно. - person Juan Sanchez; 13.03.2021