写点什么

SpringBoot- 技术专题 -war 包项目外置配置文件

发布于: 2020 年 11 月 04 日
SpringBoot-技术专题-war包项目外置配置文件

一.修改 pom.xml 文件

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

<packaging>war</packaging>
复制代码


2.添加依赖

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

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

3.打包时跳过测试

在 properties 里面增加以下代码:

<skipTests>true</skipTests>            <!--可以跳过数据库连接等测试-->
复制代码


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

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

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

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

image.png

三.新建 ServletInitializer 类

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

代码如下:

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 进行打包

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

image.png

五.部署测试

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


六.加载外部配置文件

删除项目中原有 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
复制代码


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

参考博文如下:

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

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


用户头像

我们始于迷惘,终于更高的迷惘. 2020.03.25 加入

一个酷爱计算机技术、健身运动、悬疑推理的极客狂人,大力推荐安利Java官方文档:https://docs.oracle.com/javase/specs/index.html

评论

发布
暂无评论
SpringBoot-技术专题-war包项目外置配置文件