写在前面
请先阅读:
MAVEN的SCOPE属性详细说明:https://blog.csdn.net/goodjava2007/article/details/122860143
SpringBootServletInitializer的作用
SpringBootServletInitializer 是一个 SpringBoot 提供的、用于配置SERVLET初始化的类,它实现了WebApplicationInitializer 接口,因此可以在SERVLET容器启动时被自动加载,并生成一个SERVLET容器的配置类,用来初始化SERVLET容器。
一句话:SpringBootServletInitializer让SpringBoot将应用程序以 WAR 包的形式部署在外部的SERVLET容器中(如 Tomcat、Jetty、Undertow等),并提供一种简单的配置外部SERVLET容器的方法。
如何使用
public class ServicexAdminServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ServicexAdminApplication.class);
}
}
部署步骤
1. 修改POM文件
<artifactId>servicex-admin-api</artifactId>
<packaging>war</packaging>
<description>WEB服务主入口模块</description>
2. 排除WEB容器(不排除内置的TOMCAT也没有问题)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除内置的TOMCAT组件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
或者,使用下面的方式也可以
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3. 注册启动类
新建一个启动类,继承自SpringBootServletInitializer,重新configure()方法
public class ServicexAdminServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ServicexAdminApplication.class);
}
}
或者,使用下面的方式也可以
/**
* 主启动入口
*/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ServicexAdminApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ServicexAdminApplication.class);
}
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(ServicexAdminApplication.class, args);
String[] beans = context.getBeanDefinitionNames();
// 下面仅仅用于将容器中BEAN进行打印
Arrays.stream(beans).sorted().forEach(System.out::println);
System.out.println("管理端的服务启动成功...");
}
}
4. 生成WAR包
使用常规方式打包
5. 部署
将WAR包复制到webapps目录下,然后启动TOMCAT
6. 控制台乱码
# 将"conf/logging.properties"文件中的内容进行修改,修改为GBK,如下:
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK