Как получить доступ к значениям в application.properties, определенных в другом файле в Spring Boot

Я хочу передать подключение к базе данных и учетные данные из application.properties на аутсорсинг и получить к ним доступ в своем application.properties.

Я создал файл под названием env.properties.

DB_USER=test
DB_PASSWORD=test
DB_URL=jdbc:mysql://localhost:3306/testDB

Затем импортировал файл в свой application.properties и попытался получить доступ к значениям.

spring.application.name=CampusFlow
spring.config.import=optional:env.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=Environment#getProperty("DB_URL")
spring.datasource.username=Environment#getProperty("DB_USER")
spring.datasource.password=Environment#getProperty("DB_PASSWORD")

Таким образом, я не смог получить доступ к значениям своих переменных. Как мне получить доступ к значениям?

Почему бы вам просто не добавить файл свойств для выделенных сред, содержащий необходимые данные, например application-production.properties? Таким образом, у вас есть все необходимые данные, а также файл конфигурации, связанный с его профилем.

Slevin 26.04.2024 13:37

Я пытался скрыть свои учетные данные и соединение и нашел это удобное решение, но не смог получить то, к чему стремился. Честно говоря application-production.properties даже не было в моих силах. Спасибо за комментарий, попробую так.

StefanoF02 26.04.2024 14:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
179
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны использовать обозначение ${}.

Пример, который сработал для меня:

application.yml

spring:
 config:
  import:
   env.properties
myvar: ${TEST}

окр.свойства

TEST=myvar

Таким образом я смог получить доступ к своим ценностям, спасибо. Тем не менее мне следует переименовать свои evn.properties в application-dev.properties.

StefanoF02 26.04.2024 14:12

Отличный вопрос. Самый простой способ — просто заменить их следующим образом:

spring.application.name=CampusFlow
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}

Однако это возьмет не из env.properties, а из переменных среды. На самом деле он займет 15 мест в следующем порядке: https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config

Более того, свойство Spring.config.import предназначено для сервера конфигурации Spring Cloud, который может делать именно то, что вы предполагали, однако для этого требуется обслуживание/размещение/т. д. другого приложения. Поэтому я бы не рекомендовал его.

В качестве простой альтернативы можно порекомендовать то, что если вы в любом случае хотите «внедрить» их из файла, это использовать SPRING_APPLICATION_JSON (либо в качестве переменной среды, либо аргумента jvm, либо свойства Spring) и поместить содержимое в формат JSON, что-то так:

{
    "DB_USER": "test",
    "DB_PASSWORD": "test",
    "DB_URL": "jdbc:mysql://localhost:3306/testDB"
}

Однако в любой значимой среде вы можете безопасно вводить переменные в контейнер/среду выполнения, и, скорее всего, вам не придется выполнять эту частичную конфигурацию файла, просто используйте конфигурации-заполнители, как указано выше, с введенными значениями.

Другие вопросы по теме