Как использовать Cloud Foundry для обслуживания веб-приложения Spring Boot с интерфейсом Vue и базой данных H2? - PullRequest
0 голосов
/ 29 мая 2019

Я следовал учебному пособию, используя Vue в качестве внешнего интерфейса и используя пружинную загрузку в качестве внутреннего. Я пишу интерфейс и помещаю собранные файлы из папки dist Vue в папку src\main\resources\static весенней загрузки.

В руководстве рассказано, как использовать axios для передачи данных в бэкэнд. Его конфигурация следующая:

var axios = require('axios')
axios.defaults.baseURL = 'http://localhost:8090/api'

Хорошо работает на моем локальном ПК. Но я хочу поставить его и заставить работать на облаке. Я строю банку с mvn clean install. Затем загрузил его в облачный литейный завод IBM. Интерфейс работает. Тем не менее, это не говорит с бэкэндом. Журнал консоли браузера показывает:

XHR failed loading: OPTIONS "<URL>".
4xhr.js:178 OPTIONS http://localhost:8090/api/login net::ERR_CONNECTION_REFUSED

Демо загружено здесь

Я также хочу включить базу данных H2, но я попытался, и она работает только в режиме mem или в режиме файла. Режим jdbc:h2:tcp://localhost/~/test не работает в облаке. Так как заставить его работать на облаке? Есть ли другой способ заставить Вью говорить с бэкэндом Java без аксиом? Или, если это необходимо, можно ли настроить облачный литейный завод, чтобы ссылка работала? Или, если облачный литейный цех не может этого сделать (я использую облачный литейный цех только потому, что это легко, просто загрузите банку, не нужно настраивать) может ли k8s сделать это?

1 Ответ

1 голос
/ 29 мая 2019

XHR не удалось загрузить: ВАРИАНТЫ "".4xhr.js.Вам нужно обновить настройку axios.defaults.baseURL, указав маршрут, который вы привязали к своему приложению.

Вы можете жестко запрограммировать это в конфигурации, что не очень хорошо, но работает, или вы можете ссылаться на VCAP_APPLICATION переменная окружения, которая устанавливается Cloud Foundry и содержит информацию о вашем приложении, включая связанные маршруты (их может быть несколько).Вы можете прочитать это, выбрать маршрут и динамически настроить ваше приложение.

Пример:

 "VCAP_APPLICATION": {
  "application_id": "<guid>",
  "application_name": "<app-name>",
  "application_uris": [
   "app-name.apps.example.com",
   "some-other-route.example.com"
  ],
  "application_version": "df82308c-7add-4f2b-bb44-a58680084a79",
  "cf_api": "https://api.system.example.com",
  "limits": {
   "disk": 1024,
   "fds": 16384,
   "mem": 64
  },
  "name": "<app-name>",
  "space_id": "<space-guid>",
  "space_name": "<space-name>",
  "uris": [
   "app-name.apps.example.com",
   "some-other-route.example.com"
  ],
  "users": null,
  "version": "df82308c-7add-4f2b-bb44-a58680084a79"
 }

Я также хочу включить базу данных H2, но я пробовал, и она работает только нарежим памяти или режим файла.Режим jdbc:h2:tcp://localhost/~/test не работает в облаке.

Я не понимаю, почему это технически не сработает, если ваше приложение общается с базой данных через localhost, всетрафик будет внутри контейнера приложения.Вы должны были бы быть более конкретными о том, что именно терпит неудачу.

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

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

Попробуйте запустить cf marketplace, чтобы увидеть список услуг, предлагаемых вашим провайдером.Многие сервисы даже имеют бесплатные тарифные планы, так что вы можете попробовать их или использовать их для небольших приложений и демонстраций.

Надеюсь, это поможет!

...