SpringBoot war包部署到tomcat

这里用maven打包,关于maven下载安装及环境变量配置请自行百度。

1.排除嵌入式tomcat,修改pom文件

由于SpringBoot自带嵌入容器,如果要部署到外部tomcat,打包之前就需要把嵌入tomcat排除在外:


  org.springframework.boot
  spring-boot-starter-tomcat
  provided

同时将

jar  

修改为:

war  

2.注册启动类

修改启动类继承SpringBootServletInitializer类,并重写configure方法:

@SpringBootApplication
public class XibuApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(XibuApplication.class);
    }
}

3.用maven命令打包

cd到项目根目录,执行以下打包指令

mvn clean package  -Dmaven.test.skip=true;

该命令会在项目根目录下的target文件夹下生成对应的war包文件。

4.将war包文件部署到tomcat

比如笔者war包名为xibu.war,将该war包丢到/Users/archerlj/Library/apache-tomcat-8.5.8/webapps目录下即可。
为了访问方便,我修改了tomcat安装目录下的conf文件下的server.xml文件:

在该文件最后的Host节点添加如下:
            
            
path是虚拟目录。
docBase是真实目录,可以是相对路径或者绝对路径,这里因为xibu.war放在webapp下面,所以直接用了相对路径。

这样,启动tomcat之后就可以直接通过访问http://localhost:8080来访问你的项目了。

好了,cd到tomcat的bin目录下 sudo sh startup.sh启动tomcat就可以了,这时候访问http://localhost:8080就能访问部署的项目了(笔者修改了端口:8081)

结果







5.遇到的问题:

1。有些jar包打包的时候报错,比如google的kaptcha 在中央仓库中是不存在的。这时候需要自己下载对应的jar包,并添加到本地maven仓库:


    com.google.code.kaptcha
    kaptcha
    2.3.2

mvn install:install-file -DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3.2 -Dfile=C:\kaptcha-2.3.jar -Dpackaging=jar -DgeneratePom=true

C:\kaptcha-2.3.jar是下载的kaptcha jar包的位置。
再打包就可以了。

2.图片上传。
关于图片上传,我是上传到了tomcat中自己目录的一个固定位置

/Users/archerlj/Library/apache-tomcat-8.5.8/webapps/xibu/uploadFiles

xibu是我的app名字,直接把上传的图片丢到uploadFiles中,然后再把对应的路径存到数据库中即可(存储的路径只需要这么写就可以了:http://localhost:8080/uploadFiles/xxxxx.png);
以下是示例代码:

  @Value("${upload.file.address}")
    private String uploadAddress;

    @Value("${upload.file.db.save.address}")
    private String dbSaveAddress;

    @RequestMapping(value = "/updatePostrait", method = RequestMethod.POST)
    @ResponseBody
    public Response handleFileUpload(@RequestParam("croppedImage") MultipartFile file,
                                     HttpServletRequest request,
                                     Map map){
        if(!file.isEmpty()){
            try {
                File temp = new File(uploadAddress);
                if (!temp.exists() && !temp.isDirectory()) {
                    temp.mkdir();
                }
                String uploadFile = uploadAddress + getUserId() + ".png";

                File tempFile = new File(uploadFile);
                if (tempFile.exists()) {
                    tempFile.delete();
                }

                BufferedOutputStream out = new BufferedOutputStream(
                        new FileOutputStream(
                                new File(uploadFile)
                        )
                );
                out.write(file.getBytes());
                out.flush();
                out.close();

                User user = getUser();
                user.setPostraitImage(dbSaveAddress+getUserId()+".png");
                userRepository.save(user);

                getSession().setAttribute(Const.LOGIN_SESSION_KEY, user);
                map.put("user", user);
                return result(ExceptionMsg.SUCCESS);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return result(ExceptionMsg.FAILD);
            } catch (IOException e) {
                e.printStackTrace();
                return result(ExceptionMsg.FAILD);
            }
        }else{
            return result(ExceptionMsg.FAILD);
        }
    }
application.properties:

########################################################
### 文件上传未知
########################################################
upload.file.address=/Users/archerlj/Library/apache-tomcat-8.5.8/webapps/xibu/uploadFiles/
upload.file.db.save.address=http://localhost:8081/uploadFiles/

你可能感兴趣的:(SpringBoot war包部署到tomcat)