StockEaseApplication.java

package com.stocks.stockease;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * StockEase Spring Boot Application entry point.
 * 
 * Bootstraps the StockEase inventory management system with Spring Boot auto-configuration.
 * 
 * Component discovery:
 * - @SpringBootApplication enables auto-configuration, component scanning, and configuration properties
 * - Scans com.stocks.stockease package and subpackages for @Component, @Service, @Repository, @Controller
 * - Registers all beans in Spring context for dependency injection
 * 
 * Initialization sequence:
 * 1. SpringApplication.run() starts embedded Tomcat server
 * 2. Spring loads application.properties (or application-{profile}.properties)
 * 3. FlywayConfiguration bean runs (initMethod="migrate") before JPA initialization
 * 4. Database migrations execute (V*__*.sql files from db/migration/)
 * 5. EntityManagerFactory initializes with migrated schema
 * 6. Controllers, services, repositories become available
 * 7. Application ready for HTTP requests on http://localhost:8080
 * 
 * Profiles:
 * - dev: local development (H2 in-memory DB, debug logging)
 * - test: integration tests (TestConfig bean provides test data)
 * - prod: production deployment (PostgreSQL, minimal logging)
 * 
 * Actuator endpoints (Spring Boot management):
 * - GET /actuator/health - application health status
 * - POST /actuator/shutdown - graceful shutdown (if enabled)
 * 
 * @author Team StockEase
 * @version 1.0
 * @since 2025-01-01
 */
@SpringBootApplication
public class StockEaseApplication {

    /**
     * Main method - entry point for JVM execution.
     * 
     * Called by JVM when application jar runs:
     * - java -jar stockease-0.0.1-SNAPSHOT.jar [args]
     * - java -jar stockease-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
     * 
     * Delegates to SpringApplication.run() to start the embedded container
     * and initialize Spring context with all managed beans.
     * 
     * @param args command-line arguments:
     *   - --spring.profiles.active=prod (set active profile)
     *   - --server.port=9000 (override port)
     *   - --logging.level.root=DEBUG (set log level)
     */
    public static void main(String[] args) {
        SpringApplication.run(StockEaseApplication.class, args);
    }
}