package com.example.demo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.event.EventListener; import org.springframework.core.env.Environment; import com.example.demo.config.AppProperties; import com.example.demo.util.BrowserUtil; /** * 主要功能: * 1. 文件读取、写入、编辑 * 2. 目录列表和结构查看 * 4. 连续性文件操作 */ @SpringBootApplication @EnableConfigurationProperties(AppProperties.class) @EnableAspectJAutoProxy public class CopilotApplication { private static final Logger logger = LoggerFactory.getLogger(CopilotApplication.class); @Autowired private AppProperties appProperties; @Autowired private Environment environment; public static void main(String[] args) { SpringApplication.run(CopilotApplication.class, args); } /** * 应用启动完成后的事件监听器 * 自动打开浏览器访问应用首页 */ @EventListener(ApplicationReadyEvent.class) public void onApplicationReady() { AppProperties.Browser browserConfig = appProperties.getBrowser(); if (!browserConfig.isAutoOpen()) { logger.info("Browser auto-open is disabled"); return; } // 获取实际的服务器端口 String port = environment.getProperty("server.port", "8080"); String actualUrl = browserConfig.getUrl().replace("${server.port:8080}", port); logger.info("Application started successfully!"); logger.info("Preparing to open browser in {} seconds...", browserConfig.getDelaySeconds()); // 在新线程中延迟打开浏览器,避免阻塞主线程 new Thread(() -> { try { Thread.sleep(browserConfig.getDelaySeconds() * 1000L); if (BrowserUtil.isValidUrl(actualUrl)) { boolean success = BrowserUtil.openBrowser(actualUrl); if (success) { logger.info("✅ Browser opened successfully: {}", actualUrl); System.out.println("🌐 Web interface opened: " + actualUrl); } else { logger.warn("❌ Failed to open browser automatically"); System.out.println("⚠️ Please manually open: " + actualUrl); } } else { logger.error("❌ Invalid URL: {}", actualUrl); System.out.println("⚠️ Invalid URL configured: " + actualUrl); } } catch (InterruptedException e) { logger.warn("Browser opening was interrupted", e); Thread.currentThread().interrupt(); } }).start(); } }