在Spring Boot中配置主类

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文件清单的不同方法。
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot项目,您可以通过在主类添加CXF的Servlet配置来使用CXF框架。以下是添加CXF的Servlet配置的步骤: 1. 在主类添加`@ServletComponentScan`注解,用于启用Servlet自动扫描: ```java @SpringBootApplication @ServletComponentScan public class DemoApplication { // ... } ``` 2. 创建一个继承自`SpringBootServletInitializer`的类,并重写`configure`方法: ```java public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(DemoApplication.class); } } ``` 3. 创建一个继承自`CXFServlet`的类,并注册为Servlet: ```java @WebServlet(urlPatterns = "/soap/*", displayName = "CXFServlet") public class MyCXFServlet extends CXFServlet { private static final long serialVersionUID = 1L; } ``` 4. 在主类创建一个`ServletRegistrationBean`,并将`MyCXFServlet`注册到servlet容器: ```java @SpringBootApplication @ServletComponentScan public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean public ServletRegistrationBean<MyCXFServlet> cxfServlet() { return new ServletRegistrationBean<>(new MyCXFServlet(), "/soap/*"); } } ``` 在以上步骤,`/soap/*`是CXF Servlet的访问路径,您可以根据实际情况进行修改。另外,需要注意的是,如果您使用了Spring Boot 2.x版本,需要将CXF的版本设置为3.3.x或以上版本。 希望以上内容能够帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值