知識點
1、Thymeleaf會在第一次對模板解析之後進行緩存,極大的提高了併發處理能力。但是這給我們開發帶來了不便,修改頁面後並不會立刻看到效果,我們開發階段可以關掉緩存使用:
# 開發階段關閉thymeleaf的模板緩存
spring.thymeleaf.cache=false
注意:在Idea中,我們需要在修改頁面後按快捷鍵:Ctrl + Shift + F9
對項目進行rebuild纔可以。
2、引入jdbc啓動器的時候,SpringBoot2已經自動幫我們引入了一個連接池:
HikariCP,因此,我們只需要指定連接池參數即可:
# 連接四大參數
spring.datasource.url=jdbc:mysql://localhost:3306/heima
spring.datasource.username=root
spring.datasource.password=123
# 可省略,SpringBoot自動推斷
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.minimum-idle=10
3、添加攔截器
攔截器也是我們經常需要使用的,在SpringBoot中該如何配置呢?攔截器不是一個普通屬性,而是一個類,所以就要用到java配置方式了。在SpringBoot官方文檔中有這麼一段說明:
If you want to keep Spring Boot MVC features and you want to add additional MVC configuration (interceptors, formatters, view controllers, and other features), you can add your own
@Configuration
class of typeWebMvcConfigurer
but without@EnableWebMvc
. If you wish to provide custom instances ofRequestMappingHandlerMapping
,RequestMappingHandlerAdapter
, orExceptionHandlerExceptionResolver
, you can declare aWebMvcRegistrationsAdapter
instance to provide such components.If you want to take complete control of Spring MVC, you can add your own
@Configuration
annotated with@EnableWebMvc
.
翻譯:
如果你想要保持Spring Boot 的一些默認MVC特徵,同時又想自定義一些MVC配置(包括:攔截器,格式化器, 視圖控制器、消息轉換器 等等),你應該讓一個類實現
WebMvcConfigurer
,並且添加@Configuration
註解,但是千萬不要加@EnableWebMvc
註解。如果你想要自定義HandlerMapping
、HandlerAdapter
、ExceptionResolver
等組件,你可以創建一個WebMvcRegistrationsAdapter
實例 來提供以上組件。如果你想要完全自定義SpringMVC,不保留SpringBoot提供的一切特徵,你可以自己定義類並且添加
@Configuration
註解和@EnableWebMvc
註解
總結:通過實現WebMvcConfigurer
並添加@Configuration
註解來實現自定義部分SpringMvc配置。
首先我們定義一個攔截器:
public class LoginInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
logger.debug("preHandle method is now running!");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
logger.debug("postHandle method is now running!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
logger.debug("afterCompletion method is now running!");
}
}
然後,我們定義配置類,註冊攔截器:
@Configuration
public class MvcConfig implements WebMvcConfigurer{
/**
* 通過@Bean註解,將我們定義的攔截器註冊到Spring容器
* @return
*/
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
/**
* 重寫接口中的addInterceptors方法,添加自定義攔截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 通過registry來註冊攔截器,通過addPathPatterns來添加攔截路徑
registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
}
}
4、SpringBoot爲我們提供了默認配置,而默認配置生效的條件一般有兩個:
- 你引入了相關依賴
- 你自己沒有配置
1)啓動器
所以,我們如果不想配置,只需要引入依賴即可,而依賴版本我們也不用操心,因爲只要引入了SpringBoot提供的stater(啓動器),就會自動管理依賴及版本了。
因此,玩SpringBoot的第一件事情,就是找啓動器,SpringBoot提供了大量的默認啓動器。
2)全局配置
另外,SpringBoot的默認配置,都會讀取默認屬性,而這些屬性可以通過自定義application.properties
文件來進行覆蓋。這樣雖然使用的還是默認配置,但是配置中的值改成了我們自定義的。
因此,玩SpringBoot的第二件事情,就是通過application.properties
來覆蓋默認屬性值,形成自定義配置。
application.yml 和pom.xml參考
application.yml
server:
port: 80
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/lvt?useSSL=false
username: root
password: 123456
thymeleaf:
cache: false
mybatis:
configuration:
map-underscore-to-camel-case: true
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lvt.demo</groupId>
<artifactId>springboot_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<!--jdk版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--添加父工程座標-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<!--讓SpringBoot幫我們完成各種自動配置,引入SpringBoot提供的自動配置依賴,稱爲`啓動器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--jdbc連接和事務 引入jdbc啓動器的時候,SpringBoot已經自動幫我們引入了一個連接池HikariCP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql 驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--SpringBoot官方並沒有提供Mybatis的啓動器,不過Mybatis[官網](https://github.com/mybatis/spring-boot-starter)自己實現了-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
<!-- Thymeleaf 模版引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
</project>