将springboot打成war包
- 移除内置tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
- 添加一个tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
- 修改打包方法
<packaging>war</packaging>
- 修改启动类(配置类)
继承一个类,重写它的一个方法,这个可以写到配置类里。
public class DiscoveryApp extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DiscoveryApp.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DiscoveryApp.class);
}
}
- 添加war包插件
在纯springboot项目里,上述四步就可以了。但在springcloud里会出现缺失web.xml
文件的错误。需要添加如下配置:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.5</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
在tomcat里运行多个springboot
按照上面的方法在tomcat里只能运行一个springboot项目,运行多个项目时会出现:
UnableToRegisterMBeanException: Unable to register MBean
之类的异常信息,对此可以在application.yml
(或同等配置文件里)写上
spring:
jmx:
enabled: false
据说只需在第二个、第三个springboot项目上配置,但建议全配。
单tomcat多个端口
修改server.xml
文件:
增加端口就是server.xml
文件里增加<Service></Service>
标签。如下:
<Service name="gateway">
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine name="gateway" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="localhost" appBase="gateway" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/gateway" reloadable="true"/>
</Host>
</Engine>
</Service>
<Service name="gateway">
将会在tomcat的安装目录下新建一个指定名称的文件夹,把war包放在里面。
标签<Connector/>
定义端口。
<Context docBase="/gateway"/>
这里指定war包解压后的路径名,使用相对路径时,是相对于标签里<Service name="gateway">
指定的路径,配置后访问该端口就可以直接访问项目的内容,而不需要加上项目路径了。
网友评论