一、springboot2与tomcat
由于springboot是自带tomcat启动,默认的context是/,如果日后有部署tomcat的打算,那么需要注意提前规划好context与前端的交互。
例如:
- springboot 服务1 端口是8901,服务2 端口是8902,但是如果为了充分利用资源,上线后在tomcat部署多个服务,那么端口都是8080。
- sprintboot 服务1和服务2的context都是/,那么测试阶段如果有跟前端交互那么地址也是 /,后续部署tomcat上,两个项目会冲突,默认tomcat按照目录作为context的路径,导致后端服务部署到tomcat上后,前端无法访问。
application.yml 配置样例
server:
port: ${maven.server.port}
servlet:
application-display-name: web-rest
context-path: /web-rest
部署打包,pom中build->finalName配置与context-path保持一致,这样部署至tomcat时就不需要改war的名字,否则context会跟着目录的名字走。
<build>
<finalName>web-rest</finalName>
...
</build>
二、springboot2与数据库连接池
springboot默认自带的是HikariCP,评测是目前最快的数据库连接池,短小精悍,因此无需再更换数据库连接池为Druid。
三、日志配置样例
logging:
file: eprint-web-rest.log # 日志文件,绝对路径或相对路径
path: ${maven.logging.rootPath} # 保存日志文件目录路径
config: classpath:logback-custom.xml # 日志配置文件,Spring Boot默认使用classpath路径下的日志配置文件,如:logback.xml
# level: # 日志级别
# org.springframework.web: DEBUG # 配置spring web日志级别
有的时候由于文件格式问题,导致无法读取config:中的logback-custom.xml,可重新建立文件,重新敲入配置。
四、多个服务部署至tomcat时报jmx错误
spring:
jmx:
default-domain: web-rest
因为jmx的默认域配置会有冲突,因此每个服务增加默认域配置区分开。
五、关于springboot网关的部署
springcloud对应的网关是gateway,由于使用的是netty,不能直接部署到tomcat中,只能打包通过java -jar运行。
六、部署tomcat的相关配置
<groupId>com.eprint</groupId>
<artifactId>web-rest</artifactId>
<version>${web-rest}</version>
<packaging>war</packaging>
<dependencies>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
启动类修改,继承SpringBootServletInitializer,覆盖configure方法
public class EprintRestWebApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(EprintRestWebApplication.class, args);
}
/**
* tomcat启动使用该方法
* @param builder
* @return
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(EprintRestWebApplication.class);
}
}
这样既可以测试启动自带的容器,也可以打war包,部署tomcat。