Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

The goal of this project is to implement an application called product-app. It consists of two Spring Boot services: product-api (backend) and product-ui (frontend). Data will be stored in Elasticsearch

NotificationsYou must be signed in to change notification settings

ivangfr/springboot-elasticsearch-thymeleaf

Repository files navigation

The goal of this project is to implement an application calledproduct-app. It consists of twoSpring Boot services:product-api (backend) andproduct-ui (frontend). The data will be stored inElasticsearch.

Proof-of-Concepts & Articles

Onivangfr.github.io, I have compiled my Proof-of-Concepts (PoCs) and articles. You can easily search for the technology you are interested in by using the filter. Who knows, perhaps I have already implemented a PoC or written an article about what you are looking for.

Project diagram

project diagram

Applications

  • product-api

    Spring Boot Web Java application that exposes a REST API to manage products. Product information is stored inElasticsearch.product-api usesSpring Data Elasticsearch to persist/query/delete data inElasticsearch.

  • product-ui

    Spring Boot Web application that was implemented usingThymeleaf as HTML template. Also, it usesHttp Interfaces to simplify HTTP remote access toproduct-api.

Prerequisites

Start Environment

  • Open a terminal and navigate to thespringboot-elasticsearch-thymeleaf root folder run:

    docker compose up -d
  • Wait forElasticsearch Docker container to be up and running. To verify it, run:

    docker ps -a

Initialize Elasticsearch

Note
In the following steps, we will create an index, an alias and do a reindex using pre-defined scripts. In case you prefer to do it step-by-step callingElasticsearch API, refer toCreating indexes, alias and reindexing using Elasticsearch API.
  • In a terminal, make sure you are in thespringboot-elasticsearch-thymeleaf root folder;

  • Run the following script to create the indexecommerce.products.v1 with the aliasecommerce.products (you can use the default values by just pressingEnter on every user input):

    ./create-index.sh
  • If you want to insert some products, run:

    ./insert-products.sh
  • If you want to fix thereference property mapping error (explained below), run:

    ./reindex.sh

    The script./reindex.sh is used to reindex one index to another. The default will reindex fromecommerce.products.v1 toecommerce.products.v2. The only difference betweenelasticsearch/mapping-v1.json (used byecommerce.products.v1) andelasticsearch/mapping-v2.json (used byecommerce.products.v2) is thetype of thereference property. In the former, it is set the typetext and, in the latter, the typekeyword.

    It’s interesting because thereference property has some special characters. An example ofreference code isSBES@DDR4-10000. As it has the typetext,Elasticsearch (using thestandard analyzer) splits the content in tokens ['SBES', 'DDR4', 10000]. So, for example, if you are looking for a product withDDR4 RAM and, for some reason, the stringDDR4 is present in the reference code of some product X, the product X will be selected, even if it doesn’t haveDDR4 in its description.

    So, the script./reindex.sh aims to fix it, setting the typekeyword to thereference property. TheDDR4 search issue won’t happen again because, from now on,Elasticsearch won’t tokenize the content present in thereference property.

Running applications using Maven

Below are the steps to start and run the applications usingMaven. We will need to open a terminal for each one. Make sure you are in thespringboot-elasticsearch-thymeleaf root folder while running the commands.

  • product-api

    ./mvnw clean spring-boot:run --projects product-api
  • product-ui

    ./mvnw clean spring-boot:run --projects product-ui -Dspring-boot.run.jvmArguments="-Dserver.port=9080"

Running applications as Docker containers

  • Build Docker Images

    • In a terminal, make sure you are in thespringboot-elasticsearch-thymeleaf root folder;

    • Run the following script:

      ./build-docker-images.sh
  • Environment Variables

    • product-api

      Environment VariableDescription

      ELASTICSEARCH_URIS

      Specify uris of theElasticsearch search engine to use (defaultlocalhost:9200)

    • product-ui

      Environment VariableDescription

      PRODUCT_API_URL

      Specify url of theproduct-api service to use (defaulthttp://localhost:8080)

  • Run Docker containers

    • In a terminal, make sure you are in thespringboot-elasticsearch-thymeleaf root folder;

    • Run the following script:

      ./start-apps.sh

Application’s URL

Demo

  • Below is a simple demo showing a user interacting withproduct-ui:

    demo user interaction

Shutdown

  • To stop applications:

    • If they were started withMaven, go toproduct-api andproduct-ui terminals and pressCtrl+C;

    • If they were started as Docker containers, go to a terminal and, inside thespringboot-elasticsearch-thymeleaf root folder, run the script below:

      ./stop-apps.sh
  • To stop and remove docker compose containers, network and volumes, go to a terminal and, inside thespringboot-elasticsearch-thymeleaf root folder, run the following command:

    docker compose down -v

Cleanup

To remove the Docker images created by this project, go to a terminal and, inside thespringboot-elasticsearch-thymeleaf root folder, run the script below:

./remove-docker-images.sh

About

The goal of this project is to implement an application called product-app. It consists of two Spring Boot services: product-api (backend) and product-ui (frontend). Data will be stored in Elasticsearch

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp