• SpringBoot使用IDEA设置的外部Tomcat启动


    前言

          使用springboot内嵌的tomcat启动是没问题,但是工程是要放到服务器上的tomcat的,所以springboot内嵌的能够启动,但不代表服务器的tomcat能启动起来,我就遇到了这个问题,所以本地使用外部的tomcat启动,模拟服务器的tomcat可以测试一下,有问题及时修复,不要等到放到服务器上时才发现问题

       昨天遇到的问题,使用sprintboot自带的tomcat启动是没问题的,但是使用外部的tomcat启动一直没有加载启动类,排查了几个小时没解决;最后发现启动没有继承SpringBootServletInitializer导致总结一下idea使用外部tomcat时遇到的坑

    1.idea中配置tomcat(假设你的tomcat已经已下载且安装好)

      1.1选择Edit Configuration选项

      

      1.2 点击加号选择tomcat中的local

     配置如图所示,URL路径,HTTP port 这里配置的是8080

    1.3 Deployment的配置

    选择war包,注意后缀为war exploded不要选

      

     

     1.4 环境变量的一些参数根据需要配置

    1.5 点击File->Project Structure

      到此tomcat的配置就完成了

    2.sprintboot的配置(假设sprintboot项目你已经建好了)

      2.1 启动类

    • 修改启动类,使其继承SpringBootServletInitializer类,重写configure方法。
    • 如果SpringBoot帮我们建立了SpringBootServletInitializer类文件,直接删掉,修改最开始的SpringBootApplication 项目启动类,就是有main方法的那个
    @SpringBootApplication(scanBasePackages = {"io.test"})
    @EnableScheduling
    public class BigscreenApplication extends SpringBootServletInitializer {


    public static void main(String[] args) {
    SpringApplication.run(BigscreenApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    logger.info("start BigscreenApplication with:" + System.getenv().toString());
    return builder.sources(BigscreenApplication.class);
    }
    }

     

    2.2 pom文件修改

       因为要打成war所以需要起个名称<finalName>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <fork>true</fork>
                    </configuration>
                </plugin>
            </plugins>
            <finalName>test</finalName>
        </build>

     2.3如果日志log4j2.xml配置未生效,可能是没引入spring-boot-starter-logging

     注意:spring-boot-starter-web中去除spring-boot-starter-logging依赖,否则日志jar包会有冲突,导致启动失败

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
    <exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
    <exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

     

    2.4 编译时可能会报:Error java: 无法访问javax.servlet.ServletException 找不到javax.servlet.ServletException的类文件

    是因为缺少servlet的jar包引入即可

    <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
    
  • 相关阅读:
    关于 haproxy keepalived的测试
    关于 tornado.simple_httpclient SimpleAsyncHTTPClient fetch下载大文件,默认60s的问题
    Linux系统性能监控工具介绍之-tsar
    linux 系统监控好文
    python中字符串使用需要注意的地方
    如何搭建一个GitHub在自己的服务器上?
    linux使用FIO测试磁盘的iops
    适合编程学习的网站
    linux swap的添加等等
    redis主从复制原理与优化
  • 原文地址:https://www.cnblogs.com/guanbin-529/p/12772747.html
Copyright © 2020-2023  润新知