Добавляем скомпилированный фронт внутрь jar-файла при его сборке

Отлично, мы видели, что с простым html/js всё работает. Давайте теперь создадим фронт на ангуляре

Выполним команду ng new front-angular для создания скелета ангуляр-проекта

92bac0e44095fb2cd8c9c94f8dea3bf1.png

Добавим в файл app.config.ts провайдер provideHttpClient () для получения возможности использовать http-клиент

import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideRouter } from '@angular/router';

import { routes } from './app.routes';
import { provideHttpClient } from '@angular/common/http';

export const appConfig: ApplicationConfig = {
  providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes),  provideHttpClient()]
};

В файле app.component.html оставим только следующий код

От сервера получено: {{data}}

Для нас важна ссылка на переменную data в которую мы будем складывать ответ бэка, то есть случайное число

Наконец сам компонент app.component.ts

import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import { HttpClient } from '@angular/common/http';
import { timer } from 'rxjs';

@Component({
  selector: 'app-root',
  imports: [RouterOutlet],
  templateUrl: './app.component.html',
  styleUrl: './app.component.css'
})
export class AppComponent {
  baseUrl:string=window.location.origin;
  data:string = 'пусто';

  constructor(private httpClient: HttpClient) {}

  ticks =0;
  ngOnInit(){
    let timer$ = timer(2000,3000);
    timer$.subscribe((t: number)=>{
      this.ticks = t
      this.httpClient.get(this.baseUrl+"/api/v1/test/random").subscribe(
        value =>{
         this.data=value.toString();
        },
        error => {console.log(error)}
      );
    });
  }
}

Здесь всё аналогично. Запускаем таймер, который каждые три секунды делает запрос к апи бэка получая его адрес через window.location и, в случае получения успешного ответа, сохраняет его в переменной data

Скомпилируем полученный код командой npm run build которая создаст каталог dist

Скопируем содержимое каталога \FrontInBack\front-angular\dist\front-angular\browser\ в папку static нашего бэка

a9878f6bdc2d9c4dbc9b689f4a458f08.png

Запустим бэк через задачу запуска bootRun или задачу компиляции jar-файла bootJar с последующим запуском через java -jar имя-файла-сгенерированного-в-back-web-server\build\libs\

Зайдём браузером на тот же адрес http://localhost:8080/index.html и увидим что всё работает

4c2875b382fb58eba130304d2631387d.png

© Habrahabr.ru