美文网首页开源框架-SpringBoot系列
springboot打包成war包,并加载外部配置文件

springboot打包成war包,并加载外部配置文件

作者: 寻找大海的鱼 | 来源:发表于2019-08-15 17:07 被阅读0次

一.修改pom.xml文件

1.打包方式将jar改成war形式

<packaging>war</packaging>
image.png

2.添加依赖

表示tomcat容器由外部提供,不使用内置tomcat容器

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</dependency>

3.打包时跳过测试

在properties里面增加以下代码:

<skipTests>true</skipTests>            <!--可以跳过数据库连接等测试-->
image.png

二.使用idea在项目中添加web.xml

点击idea右上角红色圈圈圈出来


image.png

然后选择Modules,点击web(如果没有就点击左上角的加号新建一个),接着双击下方的Web Resource Directory中的第一项,这里是来设置webapp的路径,一般是自动设置好了的,直接点ok,然后点yes就好了。


image.png
紧接着点击下图中右上角的+号,新建web.xml,这里要注意路径,要放到刚才创建的webapp文件夹内。点击ok,然后再点击ok,web.xml就创建好了。 image.png image.png

三.新建ServletInitializer类

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


image.png

代码如下:

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(DataCenterApplication.class);
    }

}

四.项目打包

在idea最右边,Maven Projects > 项目名 > Lifecycle,
先clean一下,成功后,再点击package进行打包


image.png

成功后会在最左边的项目的target目录下生成war包


image.png

五.部署测试

将生成的war包放在你的tomcat里面的webapps文件夹下,然后启动测试,输入url:http://localhost:端口号/war包名称/映射路径

image.png

六.加载外部配置文件

删除项目中原有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
image.png

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

image.png

参考博文如下:

1.https://www.jianshu.com/p/baf624064540

2.https://blog.csdn.net/uknowzxt/article/details/94613582

相关文章

网友评论

    本文标题:springboot打包成war包,并加载外部配置文件

    本文链接:https://www.haomeiwen.com/subject/mbwzjctx.html