Cloudfoundry
с Spring Cloud
следует за 12-factor app шаблонами.
Для конфигурации также используются шаблоны config pattern suggested by 12-factor app.
В соответствии с этим шаблоном мы должны хранить свойства вне кода в среде как environment variables
. Таким образом, пакет приложений может быть развернут в любой среде после его создания без каких-либо изменений. Поскольку он выбирает конфигурацию из переменных среды, разные среды должны определять одни и те же переменные среды с разными значениями.
Всякий раз, когда вы добавляете услугу в свое приложение с использованием cf bind-service
, Cloudfoundry устанавливает предопределенные переменные среды, связанные с этой службой на виртуальной машине (или в контейнере или что-то еще).
Вы можете проверить эти переменные окружения, используя cf env app-name
. (Command Refeference)
Пример вывода cf env app-name
{
"VCAP_APPLICATION": {
"application_id": "fa05c1a9-0fc1-4fbd-bae1-139850dec7a3",
"application_name": "my-app",
"application_uris": [
"my-app.10.244.0.34.xip.io"
],
"application_version": "fb8fbcc6-8d58-479e-bcc7-3b4ce5a7f0ca",
"limits": {
"disk": 1024,
"fds": 16384,
"mem": 256
},
"name": "my-app",
"space_id": "06450c72-4669-4dc6-8096-45f9777db68a",
"space_name": "my-space",
"uris": [
"my-app.10.244.0.34.xip.io"
],
"users": null,
"version": "fb8fbcc6-8d58-479e-bcc7-3b4ce5a7f0ca"
}
Используя spring actuator endpoints вы можете просмотреть все переменные окружения, используя /env
конечную точку. Он содержит больше свойств, чем cf env
.
Когда весна обнаруживает, что
cloud profile
активен (устанавливается spring.profiles.active
свойством среды, или spring.profile
собственности в spring cloud
)
Auto Configuration
включен (включен по @SpringBootApplication)
- Нет в памяти Datasource зависимость присутствовать на пути к классам (хотя я предполагаю, что он предоставит предпочтение конфигурации облачного источника данных, даже если присутствует зависимость от памяти)
- Нет источник данных не был явно настроен
Spring создает самое Datasource боб, используя переменные окружения, если услуга DataSource (как Postgres) была связана с приложением.
Ниже приведена ссылка на свойства среды, которые она использует для создания источника данных.
https://docs.cloudfoundry.org/buildpacks/java/spring-service-bindings.html
Вот список DataSource только свойства.
cloud.services.<database-service-name>.connection.hostname
cloud.services.<database-service-name>.connection.name
cloud.services.<database-service-name>.connection.password
cloud.services.<database-service-name>.connection.port
cloud.services.<database-service-name>.connection.username
cloud.services.<database-service-name>.plan
cloud.services.<database-service-name>.type
database-service-name
определяется в файле Manifest.yml
в env: block
По моему опыту, если есть только одна служба базы данных добавляется к приложению, не было никакой необходимости, чтобы определить имя службы базы данных в разделе переменных окружения ,
Примечание:
К весне по умолчанию будет пытаться использовать однородна поддержку подключения контейнера сервлет, однако большую часть времени мы наш я должны настроить некоторые свойства, которые поддерживаются только поставщики пула соединений, такие как Apache ДБХП. В этих случаях нам нужно создать компонент Datasource вручную, используя свойства среды (используя System.getProperty() или Spring Environment.getProperty()).
Я бы предположил, что под капотом все те же процедуры JDBC все еще происходят, но эта Весна отвлекла их от вас. –
Я бы принял то же самое. Мой вопрос больше связан с тем, как это соединение JDBC знает имя пользователя/пароль для базы данных. Я предполагаю, что это связано с тем, что экземпляр «привязан» к приложению в PCF, но, будучи новым для PCF, я не знаю, как это работает. –