Я хочу передать подключение к базе данных и учетные данные из 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
даже не было в моих силах. Спасибо за комментарий, попробую так.
Вы должны использовать обозначение ${}.
Пример, который сработал для меня:
application.yml
spring:
config:
import:
env.properties
myvar: ${TEST}
окр.свойства
TEST=myvar
Таким образом я смог получить доступ к своим ценностям, спасибо. Тем не менее мне следует переименовать свои evn.properties в application-dev.properties.
Отличный вопрос. Самый простой способ — просто заменить их следующим образом:
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"
}
Однако в любой значимой среде вы можете безопасно вводить переменные в контейнер/среду выполнения, и, скорее всего, вам не придется выполнять эту частичную конфигурацию файла, просто используйте конфигурации-заполнители, как указано выше, с введенными значениями.
Почему бы вам просто не добавить файл свойств для выделенных сред, содержащий необходимые данные, например
application-production.properties
? Таким образом, у вас есть все необходимые данные, а также файл конфигурации, связанный с его профилем.