• springboot工程热部署以及部署到外部容器


    在开发过程可以使用springboot内嵌的Tomcat容器进行调试并且可以进行热部署,

    一、 热部署实现 

    当我们修改了类文件后,idea不会自动编译,得修改idea设置。

    • (1)File-Settings-Compiler-Build Project automatically
    • (2)ctrl  + shift + alt + / ,选择Registry,勾上 Compiler autoMake allow when app running

    在pom.xml文件引用devtools依赖

    <!-- devtools热部署 -->
    <dependency>   <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>   <scope>runtime</scope>   <optional>true</optional> </dependency>
    <build>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-maven-plugin</artifactId>       <fork>true</fork>       </configuration>     </plugin>   </plugins> </build>

    二、springboot工程部署到外部容器

    前提pom.xml中配置

    <packaging>war</packaging>

    1、排除spring-boot-starter-web依赖中的tomcat组件

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!--<exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </exclusion>
        </exclusions>-->
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    2、再引入必要的servlet-api

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>

    3、在springboot启动类中继承SpringBootServletInitializer类并重写configure方法

    /**
     * @author han.sun
     */
    @SpringBootApplication
    @ServletComponentScan
    public class DemoApplication extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    
            return builder.sources(DemoApplication.class);
        }
    }

    4、builder工程代码部署外部容器(有坑)

    当我把代码exploded或者war包部署到jetty或者tomcat的webapps目录,出现以下错误

    原因打印的exception的stackTrace显示可devtools  restart

    查看devtools包下的源代码

    显示org.springframework.boot.devtools.RemoteSpringApplication此类中有一个springboot启动器,

    一个项目中不能有多个springboot main方法;

    网上还有一种解决方案是进行指定运行时springboot的启动类,未能有成效

    解决方案: idea可以在打包的时候devtools这个jar  不进行put到lib目录下。

    未完待续

  • 相关阅读:
    20169219 实验二 Java面向对象程序设计
    20169219 2016-2017-2 《移动平台开发》第七周作业
    20169219 实验一 Java开发环境的熟悉(Linux + IDEA)
    20169219 2016-2017-2《网络攻防》第七周作业
    文件下载之ServletOutputStream
    DOM对象之window
    webservice接口的开发和调用
    utf-8与unicode是什么关系
    hibernate注解之@Onetomany、@Manytoone、@JoinColumn
    ajax不执行success的问题
  • 原文地址:https://www.cnblogs.com/han-sun/p/12558625.html
Copyright © 2020-2023  润新知