Bootstrap

springBoot项目打war包时的坑

摘要:

之前使用java的springboot框架写的一个商城的后端服务,一直运行在本地idea中,但是由于springboot内嵌的有tomcat组件,在idea中运行简直是方便到了极致,只需要点击run运行入口函数就可以。

但是问题来了,我现在想要把项目上架到linux服务器上,由于项目有父子模块,依赖的模块就比较多,自己写了个小羊来玩,把小样打包成war部署到线上tomcat中,发现项目被解析了,但是去访问项目路径却是404,被此问题困扰许久,特记录

问题复现


0.本地目录结构

 这是一个父子结构,基础依赖在父项中,打包相关的依赖添加在子模块中

在idea中运行package之后得到war包,并上传到tomcat服务器的webapps目录

1.重启tomcat效果

可以看到刚才上传的demo是已经被解析了的,并且在运行中了没有报错,但是

 

 当我去访问项目的时候,项目下所有路由都是找不到的。

问题解决


0.可能是因为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>
<!--        执行main方法时启动tomcat-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

1.启动类需要变动

之前的启动类

package cai.a.hao;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class caiahaoApplication {

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

}

更改之后的启动类 

之前哪种方式时jar包启动方式,使用war包打包时需要继承SpringBootServletInitializer并重写configure方法

package cai.a.hao;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

//如果使用war包部署,则需要继承SpringBootServletInitializer并重写configure方法
@SpringBootApplication
public class caiahaoApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(caiahaoApplication.class,args);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
        return builder.sources(caiahaoApplication.class);
    }
}

2.效果

访问测试接口caiahao/test


@Controller
public class controllertest {
    @RequestMapping("test")
    public ResponseEntity<String> test(){
        return ResponseEntity.ok("小飞棍来喽");
    }
}

结果

运行正常,访问正常 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;