
Welcome to Spring Boot 3.0 and Spring 6.0 Frontend and Backend Development using the Software lifecycle, SDLC
The planning phase drives the software life cycle by gathering inputs from customers, sales, marketing, and domain experts to assess feasibility and design ideas for a scalable, nonobsolete product.
Plan software development from the business side with a steering committee, and have architects assess feasibility to size projects using t-shirt scales and reuse existing services.
Explore planning a vendor collection system from the development side, outlining roles, using a queue to prevent lost messages, and persisting data to MongoDB NoSQL.
Define the project by gathering requirements and designing code. Collaborate in meetings with business analysts, designers, and DevOps to choose front end, spring boot, docker, and deployment.
The Requirements have been attached to this lecture for download and reference.
Install and run MongoDB in a docker container using docker run, detach mode, and port mapping (host port to container 27017), naming the container, and pulling mongo:latest from docker hub.
deploy rabbit mq with the management image on docker desktop, pull from docker hub, and run a detached container named spring rabbit mq, exposing ports 15672 and 5672.
adopt an agile iterative approach with two-week releases for QA, using daily scrum meetings and a Scrum master to manage work and roadblocks, with Jenkins verifying unit tests.
Examine the 10,000-foot design of a vendor management system and show how a Spring Boot 3 frontend producer writes JSON to RabbitMQ, while a backend consumes it to MongoDB.
Master RabbitMQ architecture by wiring publishers to exchanges, then bindings or routing keys to queues; code against producers and consumers with MongoDB and Spring Data, and test-driven development during design.
Create your first Spring Boot 3 project and configure RabbitMQ with five exchanges, building producer and consumer while leveraging auto-configuration, component scanning, and starter dependencies for a convention-driven backend.
Explore RabbitMQ exchanges, queues, and bindings, starting with the direct exchange and its routing key, and learn how five beans—exchange, queue, binding, message converter, and rabbit template—configure producers and consumers.
Build a spring boot rabbitmq producer for a direct exchange, with queues and bindings, and expose a rest endpoint to send producer messages as json.
Create a direct exchange consumer in Spring Boot, configure RabbitMQ, define queues A and B with bindings, and implement a RabbitListener to process messages.
Explore the fanout exchange, which broadcasts messages to all queues bound to it with no routing keys, delivering to every bound consumer like a publish-subscribe topic.
Build a spring boot 3 producer for a fanout exchange in RabbitMQ. Configure two queues, bindings, and a Jackson message converter to broadcast messages via a REST endpoint.
Build a fan-out consumer in Spring Boot, binding queues A and B to a fan-out exchange and logging messages from both using a Rabbit listener and Jackson message converter.
Learn how topic exchanges route messages to multiple queues using binding keys and pattern-based routing, with a producer sending messages to an exchange and broadcasting to consumers.
Develop and test a topic exchange producer in a Spring Boot 3 app, configuring queues, bindings, routing keys, and a rabbit template to send messages via a topic exchange.
Build a Spring Boot topic consumer to receive messages from topic queues using RabbitMQ, with a controller, consumer message model, configuration, and bindings, tested on port 8081.
Explore how a header exchange routes messages by header key-value pairs, enabling authentication-based routing and queue binding. The next video covers writing the header exchange producer.
Develop a headers exchange producer using Spring Boot, configuring a headers exchange, marketing and inventory queues, and header-based bindings; send json messages via rabbit template.
Build a RabbitMQ headers exchange consumer in a Spring Boot 3 app, receive raw JSON in the message body, and route to inventory and marketing queues.
Explain that there is no true default exchange; you can declare any exchange, configure a direct one, and route by queue name as the routing key.
Build a Spring Boot 3 producer using RabbitMQ's default exchange with two queues, inventory and marketing, bound by queue-name routing keys, via a RabbitTemplate and Jackson JSON converter.
Build a spring boot 3 RabbitMQ consumer using a direct exchange with durable queues inventory and marketing, set up bindings, a json message converter, and log incoming messages.
Explore the Spring microservice data model to process RabbitMQ messages and persist to MongoDB, using a REST controller, service, and repository with JSON input/output and minimal configuration.
Build a Spring Boot 3 app with MongoDB by creating a rest data controller, service, repository, and model, configuring the MongoDB uri and a unique email index.
Explore Spring Data get by id using path variable and optional in a Spring Boot 3 API; implement find by id, handle not found, and return json via response entity.
Learn spring data repositories and custom queries like find by name starts with; implement a get by name starts with endpoint with a data service and response entity.
Add an age field and implement get by age between using Spring Data repositories and a query annotation, exposing a /data/age endpoint with minAge and maxAge.
Implement a get all persons endpoint that returns all records, supports field projection to include or exclude fields, and returns not found when the result is empty.
learn to update a person by id with put in Spring Data, including path variable, request body, error handling, and a utility mapper to merge fields safely.
Create a delete by id endpoint using a delete mapping and a path variable id in Spring Boot. Return an acknowledged result with the deleted count via ResponseEntity.
This lecture demonstrates implementing pagination for a find all operation by converting the list to a page, passing a pageable with page and size, and using page requests.
Explore test driven development (TDD) and unit testing with JUnit, learning how requirements drive tests, not code, and how to write failing tests first and then code to pass.
Demonstrate test-driven development to verify the build person utility by creating original and updated persons with a builder, updating by ID in MongoDB, and asserting updated fields while preserving others.
Learn to unit test a mongo repository by mocking with Mockito to avoid real database calls, using in-memory or mock bean strategies for methods like find by name starts with.
Master unit testing of a Spring Boot repository using Mockito to cover find by age between, find by id, optional handling, update, insert, delete, and find all with pagination.
Learn unit testing a data service with mockito mocks in spring boot with mongodb, covering save, get by id, get by name, get all with pagination, and delete by id.
Learn to write unit tests for a controller layer using web mvc test, mock mvc, and mockito to verify post requests return a 200 status.
Develop Spring Boot unit tests for a controller with MockMvc, covering post, get by id, get by name, get all, update by id, and delete.
Demonstrates building and running a Postman-based integration test suite for a MongoDB-backed API, using environments, collections, and tests to post, get, update, and delete a person.
Learn integration testing with Postman for Spring Boot, including get by ID and get all, validating status 200 and essential payload fields.
Execute integration tests for get all persons with Postman, verifying 200 status, json payload with content and pagination, and test a put update for Jane Fonda.
Demonstrates SDLC phase 3 integration testing by updating a person via Postman, asserting 200 responses and payload fields such as name, address, age, and email, and deleting by ID.
Develop integration tests for a delete by id operation using Postman, verify a 200 status and acknowledged deleted account, and cover get by name starts with and by age between.
Learn to write integration tests for a MongoDB-backed api using Postman, validating get by name starts and age-range queries with response checks (name, address, city, state, zip code, age, email).
Execute SDLC phase 3 integration testing by validating a get person by age API with Postman, confirming status 200 and a JSON payload with name, address, age, and email.
Design the frontend architecture for the Spring Boot 3 vendor management app, choosing JSP over Thymeleaf templates and consuming the backend with rest template to interact with RabbitMQ.
Explore the spring front-end model using time leaf templates, with a controller and service calling an api producer via rabbit template, and rest template fetching vendors for display.
Build a spring boot 3 front-end with time leaf, add web, lombok, and rabbitmq, scaffold controller, model, service, and api, and render an index view.
Configure a rest template with a builder, auto wire it, and post a person to the backend, returning a response entity and logging the result.
Pull bootstrap templates from bootstrap.com and integrate them into a thymeleaf project, organize templates and static assets, and create reusable nav and footer fragments using thymeleaf insert.
Develop a Spring Boot producer that sends a person object to a direct exchange, configuring queue, exchange, binding, message converter, and RabbitMQ template, then verify delivery via the RabbitMQ dashboard.
Create backend unit tests for a person API using a builder and all-args constructor, with Mockito to mock posts and validate response payloads in a Spring Boot test.
Post requests flow through a RabbitMQ exchange and are written to MongoDB by the backend consumer, while frontend requests call the backend API via rest template to fetch MongoDB data.
Learn to bootstrap a spring boot 3.0.3 backend with maven, rabbitmq, and mongo, stub essential packages, and configure config, models, controllers, repositories, services, and 8081 server port.
Implement the backend api post vendor using rabbitmq messaging with a configured queue, direct exchange, routing key, and rabbit listener to persist vendors to mongodb.
Implement a paginated get vendors endpoint in Spring Boot, returning a page of vendors based on page and size, with adding vendors via RabbitMQ to MongoDB.
Learn to document a spring boot 3 backend with open API three and swagger UI, wire dependencies, run locally, and test endpoints with try it out and JSON responses.
Discover Spring Boot Actuator for health and other endpoints to monitor and manage apps, expose health, beans, env, and logs, and enable DevOps visibility across environments.
Explore how to configure Spring profiles to switch between dev, test, and prod environments using environment-specific properties files and active profile flags, ensuring correct MongoDB connections and RabbitMQ queue naming.
Design the front-end architecture for a vendor management system with Spring Boot 3, RabbitMQ, and MongoDB; implement HTML pages, CSS, and paginated vendor views with Hibernate Validator.
Create a Spring Boot front end app using Maven, Java 17, and Thymeleaf, wiring RabbitMQ with a Vendor API and Vendor Producer, and stub out configuration, controllers, models, and utilities.
selects a free bootstrap html template, integrates thymeleaf includes for nav and footer, and configures index and about pages with thymeleaf inserts in a Spring Boot frontend.
Finish the about page and implement a controller to fetch vendors with a rest template, using page and size request params and properties-configured get URL.
Map a json string to a nested response object with content vendors and pageable info using an object mapper, define models, and map in a spring boot controller.
Return the vendors list to the index view using a model, and render it in a bootstrap table with timeleaf iteration showing name, address, city, state, zip, phone, and email.
Implement frontend pagination by deriving total pages from the response, building an integer pages array, and iterating to render page links with styled buttons that highlight the current page.
Insert an add vendor button and wire a get mapping to /add-vendor to render the add vendor page, while referencing href and parameter syntax from the documentation.
Build an add vendor form on the frontend with Thymeleaf and Bootstrap, including labeled inputs for name, address, city, state, zip, phone, email, and a post vendor action.
Post vendor data to a direct exchange using RabbitMQ, configure queues, exchange, bindings, and a message converter, then persist the payload to MongoDB as backend consumes.
Regex for Zip code, Phone Number, and Email
zip code: regexp="^[0-9]{5}(?:-[0-9]{4})?$"
phone number: regexp="^((\\(\\d{3}\\))|\\d{3})[- .]?\\d{3}[- .]?\\d{4}$"
email: regexp="^[\\w!#$%&’*+/=?`{|}~^-]+(?:\\.[\\w!#$%&’*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$"
Finish frontend validation by building a field errors map from the binding result, using field names as keys, and render each default message under its input via the model.
Describe design changes triggered by a business demo, add edit and delete buttons to fix typos and remove duplicates, and implement backend error handling with a RabbitMQ dead-letter queue.
Implement backend changes to add a rejected message endpoint (RME) by adding try-catch, logging, and routing failed vendor posts to a new RabbitMQ queue via a direct exchange.
Implement a backend get by id endpoint for vendors using Spring Boot, optional handling, and functional mapping, with robust exception handling and clear http responses.
Implement a delete by id endpoint in the Spring Boot backend using a path variable and response entity, with exception handling and json status.
Implement exception handling for the get vendors endpoint by adding a try-catch, logging errors, and returning HTTP 500 with a formatted message; test with postman, and prepare front-end updates.
Learn how to translate wireframes into front end HTML, CSS and JavaScript, implement edit and delete vendor actions with IDs, and connect to the backend via swagger documented endpoints.
Rebuild the frontend home page to add edit and delete vendor actions, wiring Thymeleaf links with vendor IDs for Bootstrap-styled buttons.
Implement the frontend edit vendor flow, call the vendor API, retrieve a vendor by id, map JSON to a vendor object, and render the edit page.
Render edit vendor page with thymeleaf, populate fields from vendor model, post updates using post vendor, including hidden id field, and troubleshoot zip code handling on the back end.
Develop the delete vendor by id flow, calling the backend delete endpoint with the id path parameter via the frontend service, log deletion, and redirect to home; plan tests next.
Learn in the SDLC testing phase to write unit tests with JUnit and Mockito for the utility, then plan service, controller tests and Postman integration tests.
Continue testing the service phase by writing unit tests for post, get, and delete operations on vendors, using mock beans and Mockito to verify calls and results.
Demonstrates backend testing for vendor services: implement get vendors and get vendor by id, mock responses with Mockito, validate paging, totals, and content, and prep for controller tests.
Demonstrate testing the vendor controller with mock mvc in a web mvc test, covering listing with page and size and getting a vendor by id.
Demonstrates backend testing of a vendor controller via post and delete by id, uses Mockito to verify calls, runs and passes unit tests, and previews future integration tests with Postman.
Initialize a git repo and push vendor API to GitHub, add a readme, and use Postman to run integration tests on the /vendors endpoint, verifying 200 status and payload fields.
Perform backend integration testing with Postman by posting a fake vendor, retrieving by id, and deleting by id to ensure end-to-end vendor lifecycle, including status checks and json payload validation.
Explore unit testing for a front end utility class and back end layers by validating json conversion, page metadata, vendor data, and binding result errors using comprehensive assertions.
Write a Spring Boot unit test for the vendor API, autowiring the rest template and vendor API, using a mock rest server and object mapper to verify get vendors.
Develop unit tests for the vendor API frontend, implementing find vendor by id and delete vendor with id handling, json response checks, and prep for vendor service post tests.
Develop frontend service unit tests by mocking the vendor API, wiring mocks, and using an object mapper to verify get vendors, post vendor, and delete vendor.
Mock a vendor producer in a Spring Boot app by simulating the direct exchange and rabbit template. Call the send vendor to exchange method and assert a 'success' result.
Learn to unit test a Spring Boot frontend controller with Web MVC tests using Mockito, covering home, about, add, edit, delete and post flows with model and binding results.
Initialize a git repository, track and commit frontend source code, connect to a remote on GitHub, and push changes as part of SDLC phase 5; then explore selenium frontend tests.
Learn automated frontend testing with Selenium WebDriver for a locally hosted app. Identify web elements by id, name, css, or xpath, and simulate clicks, form fills, and errors.
Learn to write Selenium tests, install and configure the chrome driver, manage dependencies with Maven in a Spring Boot 3 project, and automate frontend validation.
Execute selenium testing for the vendor app by automating interactions with the home and about pages using a page class structure, web driver, and page factory initialization.
demonstrates a frontend selenium test flow for adding, editing, and deleting a vendor using a page object model, including by name element selection and form automation.
Demonstrates frontend selenium testing for the edit vendor flow, using assertions to verify page titles and navigating to the last added vendor with click and scroll handling.
Demonstrate frontend selenium testing by fixing a not-clickable edit vendor button on the edit vendor page via scrolling to bottom with a JavaScript executer and validating zip code errors.
Demonstrates frontend selenium testing to edit and delete vendors across pages, using a page object model, zip-code updates, and validation of navigation to the vendor portal.
Clarify the definition of done in software development, detailing zero high bugs, all unit tests passing, automated and manual tests, user acceptance testing, and updated documentation before implementation.
Implement the final stage by deploying apps in Docker containers, wiring them to MongoDB and RabbitMQ via non-localhost IP addresses, and updating properties for back-end first.
Deploy the vendor API to Docker by packaging with Maven, creating a Docker file, configuring host and RabbitMQ properties, and exposing port 8081.
Deploys the frontend of the vendor app in a docker container, updates host and rabbitmq settings, builds with maven, runs on port 8080, and tests the user interface.
Finish SDLC phase 6 by pushing final project changes to GitHub, updating docker files and maven builds, and validating selenium tests, while reinforcing best practices to avoid adding jar files.
This course has 113 videos covering over 21+ hours of content.
You will learn the complete software development life cycle creating a Full Stack Spring Boot 3.0 Application using tools like:
IntelliJ Idea
Docker
Spring Framework 6.0
RabbitMQ in Docker
JUnit (Unit Test and Mocks)
Spring Boot 3.0
MongoDB in Docker
Selenium
Postman (Integration Test)
What will we create:
Understanding of the Software Development Lifecycle. What happens behind the scenes in a Fortune 500 company in the Information Technology department. Gain understanding of the players involved who make up a software team and their roles with respect to the software development lifecycle.
You will create a consumer backend service to consume messages on the queue our application is listening for. We will write that message to our MongoDB database.
You will create the frontend using Spring and ThymeLeaf, HTML, CSS and JavaScript so we can produce messages and put them on the queue.
We will Unit Test our application and create a continuous integration / continuous delivery workspace to verify our code is in a stable build.
We will maintain our code using GitHub.
By the end of the course you will have complete understanding of the software development lifecycle and have complete confidence using the tools in this course to create a full tack application using service oriented architecture in any workplace.