Springboot整合SpringMVC

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容