其他分享
首页 > 其他分享> > SpringBoot项目打包成war包并部署到服务器上

SpringBoot项目打包成war包并部署到服务器上

作者:互联网

背景说明

当我们使用springboot开发时,有的时候需要打war包在外部tomcat部署,方便运维人员维护,但是修改配置文件后重新打包给运维的时候,又需要修改一些配置这样还是不方便维护。

环境参数

开发环境:IntelliJ IDEA 2019.3
JDK:java version "1.8.0_144"
服务器:Linux CentOS7.2

 

项目配置

 

创建一个Initializer类继承自SpringBootServletInitializer,并重写configure方法且这个类应该与项目的Application在同一级目录下

 自定义配置类实现EnvironmentPostProcessor接口

  1. EnvironmentPostProcessor是springboot支持动态读取文件的接口,实现EnvironmentPostProcessor接口覆写postProcessEnvironment方法
  2. 在postProcessEnvironment方法实现读取外部配置文件
  3.  使用YamlPropertiesFactoryBean来读取yml配置文件,getObject()方法可以获取Properties

 

Initializer类:

package com.example.demo;

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

public class ServletInitializer extends SpringBootServletInitializer {

 @Override
 protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
                                 //Application的类名
     return application.sources(WardemoApplication.class);
 }

}

项目打包

打包方式有两种,一直是使用命令行方式,另一种是通过maven来打包,同样的,这里采用较为简单的第二种方式。

Maven Projects > 项目名 > Lifecycle > 双击package开始打包

打包成功,默认war包路径在项目文件夹的target文件内

 

打包时跳过测试

在properties里面增加以下代码:

<skipTests>true</skipTests> 

项目部署

把打包好的war包放到tomcatwebapps文件夹下,然后重启tomcat就可以了,tomcat会自动解压
注意项目启动后访问路径会发生变化,如之前的访问路径是/hello,那么此时就得加上webapps下解压的那个项目文件夹的名字,即/项目文件名/hello

查看日志

 日志文件默认的路径为:tomcat目录下的/logs/catalina.out文件中。

 

注意事项

打成war包之后,server.servlet.context-path,server.port失效

可能还有一种没那么多事的办法,具体没有尝试

(1)把静态文件从resource中移出来

(2) yml文件指定静态资源的目录

spring:
 
#指定环境

    profiles:
 
        active: @package.environment@
 
#打war时指定静态文件,没有效果
 
    resources:
 
        static-locations: /static/,/public/
 
    mvc:
 
        static-path-pattern: /** #静态资源映射路径            

  

 

加载外部配置文件

删除项目中原有resources文件夹下原有的application.properties文件,然后进行打包发布,如果有连接数据库,tomcat会报错,因为没有指定相应的数据库资源。

1.在tomcat里的conf文件夹下添加进刚才删掉的application.properties文件

2.项目中新建config包,在该包下建立MyEnvironmentPostProcessor类实现EnvironmentPostProcessor接口,代码如下

 

import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;

import java.io.File;
import java.io.IOException;
import java.util.Properties;
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment, SpringApplication application) {
        //tomcat路径
        String property = System.getProperty("catalina.home");
        System.out.println("catalinahome:"+property);

        String path =property+ File.separator+"conf"+File.separator+"application.properties";
        File file = new File(path);
        System.out.println("Loading local settings from : "+path);

        if (file.exists()) {
            MutablePropertySources propertySources = configurableEnvironment.getPropertySources();
            Properties properties = loadProperties(file);
            System.out.println(properties.toString());
            propertySources.addFirst(new PropertiesPropertySource("Config", properties));
        }
    }

    private Properties loadProperties(File f) {
        FileSystemResource resource = new FileSystemResource(f);
        try {
            return PropertiesLoaderUtils.loadProperties(resource);
        } catch (IOException ex) {
            throw new IllegalStateException("Failed to load local settings from " + f.getAbsolutePath(), ex);
        }
    }
}

 

3.在classpath定义一个META-INF文件夹然后在其下面先建spring.factories文件,在其中指定:

MyEnvironmentPostProcessor路径根据自己的项目自行修改

 

org.springframework.boot.env.EnvironmentPostProcessor=com.wyh.data_center.config.MyEnvironmentPostProcessor

  

在pom.xml中配置maven打包时移除配置文件

 

 

4.再一次打包发布就成功并没有报错了,从下图中我们也看到了获取了相应的数据库信息

 

 logback.xml配置文件丢到外面直接在.yml配置文件中配置好路径就可以了

 

 

 

配置访问静态资源

在web.xml文件添加下面的配置,就可以访问部署路径下的文件了,如localhost:8080/demo/index.js

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

  

 

 

 

 

链接:https://www.jianshu.com/p/baf624064540
https://www.jianshu.com/p/4f700110725e

https://www.jianshu.com/p/4f700110725e

 https://blog.csdn.net/hzy522104212/article/details/97241374

 

标签:xml,SpringBoot,tomcat,springframework,org,import,包并,war,打包
来源: https://blog.csdn.net/lc11535/article/details/111769131