一.修改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包名称/映射路径
六.加载外部配置文件
删除项目中原有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
网友评论