先说一下本地环境及情况:
springboot项目,集成了Apollo配置中心、dubbo,jar包启动;原来没有集成Apollo配置中心的情况下,通过配置已经完成了去除内嵌tomcat,后来集成了Apollo配置中心,部署的时候发现部分服务出现了8080端口冲突,仔细排查发现项目启动的时候启动了内嵌的tomcat,但是由于没有配置server.port端口,导致使用默认 8080端口,多个服务启动的时候出现了端口被占用的问题;
本地资源文件截图如下,已删除application.yml等配置文件,配置已添加至Apollo配置中心
异常截图如下;
解决方案:
正常去除内嵌tomcat的方法
1、pom文件,去除依赖tomcat
<!-- SpringBoot 核心包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>`
2、项目启动类添加继承并重写方法,重点是System.setProperty,要把spring.main.web-application-type赋值none到System环境变量中,否则等到配置中心加载这块的时候项目已经使用8080端口启动了
@EnableDubbo
@EnableApolloConfig
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@MapperScan({"com.soulwell.*.mapper"})
public class PaymentApplication extends SpringBootServletInitializer
{
public static void main(String[] args)
{
System.setProperty("spring.main.web-application-type","none");
SpringApplication.run(PaymentApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(PaymentApplication.class);
}
}