Appearance
Overview
This document provides a comprehensive technical overview of the IT Ticketing Service. It is intended for developers responsible for maintaining, extending, and migrating this application. The content covers the application's purpose, architecture, core concepts, and setup requirements.
Introduction
The IT Ticketing Service is a Spring Boot application that provides basic Create, Read, Update, and Delete (CRUD) functionality for IT support tickets via a RESTful API.
The primary purpose of this application is to serve as a demonstration for the "Agentic AI Modernization" workshop at Google Next 2026. It represents a legacy on-premises application, currently running in a simulated VMware environment, which is targeted for migration to the Google Cloud Platform (GCP).
A core design philosophy is to facilitate this migration with minimal code changes. The migration strategy relies heavily on externalizing configuration, adhering to the principles of a 12-Factor App. This means that environment-specific settings (like database connection strings or message broker hosts) are managed entirely through configuration files (application.properties) rather than being hardcoded.
Key Features
- RESTful API: Exposes endpoints for managing the lifecycle of IT tickets.
- Data Persistence: Connects to a MySQL database for storing ticket information using Spring Data JPA.
- Asynchronous Messaging: Publishes events to a RabbitMQ message broker upon ticket creation and updates.
- Production Monitoring: Includes Spring Boot Actuator for health checks and application metrics.
What you'll learn
By reading this document, you will understand the fundamental components of the application and how they interact. This knowledge is essential for local development, debugging, and contributing to the GCP migration effort.
Specifically, you will learn:
- Local Setup: How to build and run the application in a local development environment. For a step-by-step guide, please refer to the Installation Guide.
- Core Architecture: The application's design, including its data, messaging, and API layers, and the rationale behind its configuration-centric design. For a deeper dive, see the Architecture Documentation.
- API Usage: The basic structure of the API endpoints and how to interact with them.
Prerequisites
To build and run this application locally, you will need the following software and services installed and configured on your development machine.
Required Software
| Technology | Version | Notes |
|---|---|---|
| Java (JDK) | 17 | The required Java Development Kit version. |
| Maven | 3.6+ | Used for dependency management and building the project. |
| Docker | latest | Recommended for running local instances of MySQL and RabbitMQ. |
Service Dependencies
The application requires access to a running MySQL database and a RabbitMQ message broker. The default on-premises configuration points to the following endpoints:
- MySQL Database:
legacydb.next26.slalomlab.com:3306 - RabbitMQ Broker:
localhost:5672
You must ensure you have network access to these services. For local development, it is common to run these services using Docker.
Configuration
All external service connections are managed via src/main/resources/application.properties. You may need to override these properties with your local credentials or host details.
properties
# src/main/resources/application.properties
# ===================================================================
# CORE INFRASTRUCTURE CONFIGURATION (On-Premises Defaults)
# ===================================================================
# Database Configuration
# Points to the legacy on-prem MySQL instance.
spring.datasource.url=jdbc:mysql://legacydb.next26.slalomlab.com:3306/ticketing
spring.datasource.username=ticketing_user
spring.datasource.password=changeme # Replace with the actual password
# JPA/Hibernate Configuration
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
# RabbitMQ (AMQP) Configuration
# Points to a local or network-accessible RabbitMQ instance.
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
# spring.rabbitmq.username=guest
# spring.rabbitmq.password=guest
# ===================================================================
# APPLICATION-SPECIFIC CONFIGURATION
# ===================================================================
# Server Port
server.port=8080
# Actuator Endpoints
# Exposes health and info endpoints by default.
management.endpoints.web.exposure.include=health,info1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Building and Running
Once the prerequisites are met, you can build and run the application using Maven.
Build the application package:
bash# This command compiles the code, runs tests, and packages it into a JAR file. mvn clean package1
2Run the application:
bash# This command starts the application using the Spring Boot Maven plugin. mvn spring-boot:run1
2
Alternatively, you can run the compiled JAR file directly:
bash
java -jar target/it-ticketing-service-1.0.0.jar1
The service will start and be accessible at http://localhost:8080. You can verify its status by accessing the health check endpoint at http://localhost:8080/actuator/health.