SpringApplication.run(Classname.class, args)从main方法将Spring应用程序引导为独立应用程序。它创建一个适当的ApplicationContext实例并加载bean。
默认情况下,如果未显式指定主类,则Spring将在编译时在类路径中搜索一个,如果找不到一个或多个,则启动失败。
让我们看看如何在Spring Boot中配置Main Class。
@SpringBootApplication
public class SpringBootMainClassApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMainClassApplication.class, args);
}
}
这是我们的应用程序表单的主类,Spring Boot应用程序将被执行。现在,让我们创建一个主页控制器来打开应用程序的主页。
@Controller
public class HomeController {
@RequestMapping("/")
@ResponseBody
public String goToHomePage () {
return "<h1>This is the Home page</h1>";
}
}
以下是我们的Spring Boot项目的POM.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath></relativePath> <!-- lookup parent from repository -->
</parent>
<groupId>com.dailycodebufffer.example</groupId>
<artifactId>Spring-Boot-Main-Class</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Spring-Boot-Main-Class</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
现在,当您mvn spring-boot:run 在Terminal中使用命令运行该应用程序时,Spring Boot应用程序将在application.properties文件中配置的端口8081中启动。请查看以下屏幕截图,以了解应用程序的构建成功和主页。
现在,让我们在应用程序中创建一个新的Spring Main类。创建此类后,我们将使用两个带有两个public static void main(String args[])方法的新主类。
@SpringBootApplication
public class SpringBootMainClassApplication2 {
public static void main(String[] args) {
SpringApplication.run(SpringBootMainClassApplication2.class, args);
}
}
从Java基础知识中我们知道,在Java应用程序中只能有一种主要方法。当我们尝试构建此应用程序时,它将引发以下异常。
我们如何解决这个问题?
当我们在应用程序中声明了多个主类时,Spring Boot允许我们在配置中定义Main类。在使用MAVEN构建时,我们必须为Spring Boot配置POM.xml以标识应用程序的主类。
以下是POM.xml文件中所需的更改:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.dailycodebufffer.example.SpringBootMainClass.SpringBootMainClassApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
瞧!我们可以在配置中定义任何主要类。在下面,检查我们的Spring Boot应用程序的成功构建。
使用CLI在Spring Boot中配置主类
我们还可以通过命令行界面指定主类。
Spring Boot org.springframework.boot.loader.PropertiesLauncher 带有JVM参数,可让您覆盖名为loader.main的逻辑主类:
java -cp Spring-Boot-Main-Class-0.0.1-SNAPSHOT.jar -Dloader.main=com.dailycodebufffer.example.SpringBootMainClass.SpringBootMainClassApplication org.springframework.boot.loader.PropertiesLauncher
结论
有多种方法可以指定Spring Boot应用程序的入口点。重要的是要知道所有这些配置只是修改JAR或WAR文件清单的不同方法。