springboot默认配置已经可以使用springmvc,不过有时候我们需要进行一些自定义配置。
常见配置
server:
port: 10001 # 端口号
访问静态资源
我们的项目是一个jar工程,没有webapp,那我们的静态资源应该放到哪呢?
在springboot入门一文中我们讲到,有一个叫ResourceProperties的类,里面就定义了静态资源的默认查找路径。
public class ResourceProperties {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" };
省略....
}
# 静态资源路径
classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public
例如我们在resources/static下放一张图片
xingkong
访问图片
拦截器
在springboot中我们该怎么配置拦截器呢?springboot官方的文档是这么说的。
如果你想要保持springboot的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现WebMvcConfigurer,并且添加@Configuration注解,但是千万不要加@EnableWebMvc注解。如果你想要自定义HandlerMapping、HandlerAdapter、ExceptionResolver等组件,你可以创建一个WebMvcRegistrationsAdapter实例 来提供以上组件。如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@Configuration注解和@EnableWebMvc注解
总结: 通过实现WebMvcConfigurer并添加@Configuration注解来实现自定义部分SpringMvc配置。
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("login pre ......");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("login ......");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("login after ......");
}
}
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
/**
* 重写addInterceptors方法,添加自定义拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册拦截器,通过addPathPatterns来添加拦截路径
registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
}
}
这样拦截器就配置好了,每次请求接口都会先走拦截器。
整合数据库连接池
- 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
-
HikariCP数据库连接池
引入上面两个依赖springboot就已经帮我们引入了一个数据库连接池。
HikariCP数据库连接池
HikariCP应该是目前速度最快的连接池了,我们看看它与c3p0的对比。
HikariCP和c3p0性能对比
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password:
driver-class-name: com.mysql.cj.jdbc.Driver # 可以省略,springboot会自动推断
hikari:
# 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
idle-timeout: 60000
maximum-pool-size: 30 # 连接池中允许的最大连接数。缺省值:10
minimum-idle: 10
- Druid连接池
alibaba出品
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password:
driver-class-name: com.mysql.cj.jdbc.Driver # 可以省略,springboot会自动推断
druid:
# 初始化连接数
initial-size: 1
# 最小空闲数
min-idle: 1
# 最大连接数
max-active: 20
# 获取连接时测试是否可用
test-on-borrow: true
# 监控页面启动
stat-view-servlet:
enabled: true