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方法

扫描二维码关注公众号,回复: 10119481 查看本文章
/**
 * @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目录下。

未完待续

猜你喜欢

转载自www.cnblogs.com/han-sun/p/12558625.html