Установка SerialVersionUID для класса на основе activeProfiles при загрузке SpringJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Установка SerialVersionUID для класса на основе activeProfiles при загрузке Spring

Сообщение Anonymous »


У меня есть класс, реализующий сериализуемый интерфейс, который по сути действует как DTO. Теперь этот класс является частью ветки ind, используемой в качестве тестовой версии веб-приложения.

Существует также еще одна ветка, aus, используемая в качестве рабочего приложения. Рабочее приложение представляет собой устаревший код с меньшим количеством функций.

В долгосрочной перспективе мы пытаемся перейти на единую базу кода. Таким образом, в основном тестовая версия и производственное приложение будут использовать код ветки ind, которая, по-видимому, имеет новейшие функции. Для этого мы добавили несколько файлов application.properties помимо файла по умолчанию, установив активные профили с помощью переменных среды через Jenkins.

Теперь и код ветки ind, и код ветки aus имеют этот класс DTO. В коде aus для него вручную указан SerialVersionUID. В ветке ind он не указывается вручную, решается на основе полей. Теперь в рамках перемещения внутреннего кода ветки aus в код ветки ind вызов API для возврата списка объектов выдает ошибку несоответствия сериализации между локальный класс и класс потока.

Я хочу, чтобы оба приложения теперь работали отдельно. Таким образом, при переключении сред или активных профилей с помощью speing.profiles.active, SerialVersionUID должен переключаться, как это было раньше, когда оба приложения были отдельными. Я попытался получить текущий активный профиль через System.getProperty(), а затем проверить их и установить серийныйVersionUID на основе профиля.

Затем кажется, что приложение Spring Boot отображается во время запуска, поскольку профиль установлен правильно, но когда я пытаюсь установить значение activeProfile в классе, оно становится нулевым.

Я также попробовал добавить файл @Configuration и получить активный профиль с помощью @Value(). Все работает до запуска приложения, но при выполнении вызова API для возврата объектов отображается значение null.

@Configuration общественный класс ActiveProfileConfiguration { @Value("${spring.profiles.active}") Строка активныйпрофиль; общедоступное логическое значение isInd() { System.out.println("активный: "+activeProfile); вернуть "in-test-local".equals(activeProfile); } общедоступное логическое значение isAus() { System.out.println("активный: "+activeProfile); вернуть "au-test-local".equals(activeProfile); } Это последние изменения, внесенные для получения динамического SerialVersionUID на основе текущего активного профиля.

@Getter @Сеттер @ApiModel(value = «Организация», описание = «Собрать информацию о данных организации») Организация общественного класса реализует Serializable { частный статический окончательный длинный SerialVersionUID; статический { ProfileConfiguration ActiveProfileConfiguration = новый ActiveProfileConfiguration (); если (profileConfiguration.isInd()) { серийная версияUID = 74845715165655L; System.out.println("Инд"); } иначе, если (profileConfiguration.isAus()) { серийная версияUID = -8450977346456L; System.out.println("Aus"); } еще { серийная версияUID = 1L; System.out.println("еще.."); } } Идентификатор строки; @Не ноль частное имя строки; логотип частного СМИ; частная реклама в СМИ; частный веб-сайт String; @Не ноль частный телефон String; @Не ноль частная строка businessCategoryId; @ReadOnlyProperty частные предпочтения OrganizationPreferences; частный SuperAdminOrganizationControl superAdminControl; частные константы.OrganizationMode orgMode; @NonNull частная строка userSub; частная строка geoLocationId; частное местоположение GeoLocation; описание частной строки; частная строка orgRef; частная строка orgUrl; частная строка orgEmail; частное логическое значение superAdminEnable; @Не ноль частная строка WhatsAppNumber; частная строка PrivacyStatement; частное логическое значение isCallback; частный String callbackId; //Только в ответ, а не в базу данных частный список serviceCategoryList = новый ArrayList(); ListworkHours = новый ArrayList(); } Что мне здесь не хватает? Есть ли альтернативный способ бесперебойной работы одного и того же класса в разных средах?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»