复习:
spring-boot-starter-parent:父工程–>定义了jdk默认版本,编码格式
spring-boot-dependencies:顶级父工程–>定义了java开发中常用组件的版本。
spring-boot-starter–>引入了spring-boot-autoconfigure依赖–>自动配置依赖包中有springboot官方提供预配置类。这些预配置类并不会直接生效,必须显示的在自己的主配置类中引入预配置类。
通过@SpringbootApplication注解来定义主配置类,该注解中启用了包扫描;注册主配置类的包名为包扫描范围;选择并筛选所有jar包中的预配置类导入主配置类。
SpringApplication.run();run方法负责创建容器对象,并加载主配置类(预配置类),初始化容器。启动tomcat服务器。
为什么把tomcat安装成后台应用
tomcat本地运行的时候 会有一个后台窗口,这个窗口很容易被关闭,并且电脑关机之后,也会自动关闭,所以将tomcat设置后台运行非常有必要
0209springboot
templates 是动态页面的意思
render 渲染
resolve 决定
遇到看不懂的参数名不要害怕 去查查英文意思,大部分应该都是很Low的
operation 活动;手术;(有组织的)行动;(包括许多部分的)企业;公司;(工商业)活动,业务;运算;运转;军事行动
1.springboot项目部署
-
jar包部署
在pom文件添加加入spring-boot-maven-plugin插件,对maven-jar-plugin插件打的jar包进行二次冲打包,写入应用的启动类。有了main方法启动类后jar包才可以java -jar命令来运行。 使用的是内嵌的tomcat服务器来运行项目。
-
war包部署
如果服务器上安装的优化后的tomcat或采购的收费版的webLogic服务器的话,那么项目部署服务器不能使用jar包部署,必须把项目打war包放在安装版的应用服务器上。 1.修改项目打包方式为war 2.指定war包名 3.内嵌tomcat私有化 4.SpringBootServletInitializer类派生子类,重写XX方法指定主配置类对象,子类即项目的入口类,类比成web.xml
更改banner
等会弄个嘉然的
2.静态资源处理(面试重要)
我自己总结的
springboot提供了四个静态资源目录,因为指定的路径是/** 所以对所有进来的请求都会进行静态资源文件夹下面找资源,可能影响性能
我们可以在springboot的配置文件里面更改默认的静态资源目录,和更改默认的检查路径,比如改成带前缀的目录,让不是请求静态资源的请求,不接受检查
springboot默认提供了4个静态资源目录,如下:
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
类似于springMVC的静态资源映射
<mvc:default-servlet-handler>
<mvc:resources mapping="/static/**" location="/static/"></mvc:resources>
spring:
mvc:
static-path-pattern: "/**"
resources:
static-locations: ["classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"]
springboot默认有四个静态资源目录,静态资源url是/**.我们可以在yml文件中重写指定静态资源url与静态资源目录。
3.thymeleaf视图模板引擎
jsp与thymleaf与freemarker与vector与velocity等技术统统都是模板引擎技术。作用都是在静态文本上写入引擎语法,然后传入动态数据,可以生成动态文本。静态文本可以是html。java .vue .js
类似于jsp,同步开发模式下,在静态的html页面中写jsp语法(jstl+el),用来生成动态的html内容。
thymeleaf同步开发模式下,在静态的html页面中写thymeleaf语法,用来生成动态html文本。springboot官方不支持jsp,选择thymeleaf作为同步开发的视图模板引擎。
jsp与thymeleaf区别:
jsp:编写XX.jsp;服务器转发到XX.jsp;第一次进入jsp,jsp引擎对象负责把jsp文件翻译成XX.java文件放在磁盘目录;jvm把XX.java编译成XX.class,加载到内存实例化该对象;执行对象的service方法,生成静态的html文本.
tnymeleaf:编写XX.html;服务器转发到XX.html;第一次进入html,thyemelaf引擎把html文件加载内存,解析语法;生成静态html文本。相比于jsp来说,thymleaf流程更加简洁高效。
在springboot中使用thymleaf引擎:
添加thymleaf启动器,然后ThyemleafAutoConfiguration预配置类生效,该配置中使用ThymeleafProperties配置对象,默认视图前缀/templates,默认视图后缀.html。同时预配置类注册了ThymeleafViewResolver视图解析器对象进入容器。
学习thymeleaf语法:
thyemelaf表达式:
属性表达式:${},获取服务端request,session,servletContext作用域的数据。
链接表达式:@{},为链接地址补全项目部署路径
文档表达式:~{},实现公共页面的嵌套
thymeleaf属性:
th:text 结合属性表达式,为双标签中间赋文本值。可以使用[[${}]]来替换这个属性。
th:value 结合属性表达式,为单标签赋value值。
th:herf 结合链接表达式,为a。link标签指定链接url
th:src 结合链接表达式,为script,img标签指定链接url
th:insert 页面嵌套
th:replace 页面嵌套
th:fragment 结合文档表达式,实现页面局部嵌套。<div th:replace="~{commons/top :: bottomdiv}"></div>
th:each 循环数据 ,基本用在列表标签上,ul-li。table
th:if 对数据进行boolean判断。
4.webMvcConfigurer接口(重要)
该接口中最重要的方法addInterceptors方法,用来注册springMVC拦截器
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/getRoles","/js/**","/css/**","/imgs/**");
}
5.springboot跨域设置
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("http://localhost:8081");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.addExposedHeader("admin-token");
config.setMaxAge(300000L);
source.registerCorsConfiguration("/**", config);
//注册CorsFilter到servlet
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
5.异常处理(面试)
与ssm中使用方式完全一致(使用RestControllerAdvice+ExceptionHandler注解+自定义异常进行全局统一异常处理。)
了解下springboot中的默认异常处理机制:
阅读ErrorMvcAutoConfiguration异常处理预配置类。
tomcat对程序中的任何错误都去查找/error的url处理器进行处理
BasicErrorController控制器对象,依赖DefaultErrorAttributes对象
如果是异步请求的话,则通过DefaultErrorAttributes来生成错误信息,封装到Map,再放在响应体转json字符串返回前端;
如果是浏览器的同步请求,则通过DefaultErrorAttributes来生成错误信息,封装到Map,然后去templates目录下查找error/500.html,找到则返回;找不到继续去四个静态资源目录下查找error/500.html,找到则返回;找不到则继续查询5xx错误视图。找不到则使用白板错误视图
DefaultErrorAttributes异常信息对象
可以从DefaultErrorAttributes派生自定义的子类,对异常信息进行扩展。
面试题:
说下你对springboot默认的异常处理怎么理解?
怎么扩展默认的异常信息?
6.日志
springboot中默认引入了spring-boot-starter-logging启动器,该启动器内部使用logback日志组件进行日志记录。
<!--排除默认的logging启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加log4j2启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.2</version>
</dependency>
<!--加入log4j2.xml日志配置你文件-->
7.mybatis(重要)
-
添加mysql驱动jar包
-
添加druid启动器(需要注册对象到容器的组件,都有启动器)
-
添加mybatis启动器
-
在yml’文件中配置数据库连接信息与mybatis配置信息
spring:
datasource:
url: jdbc:mysql://localhost:3306/javasm?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 10
max-active: 100
mybatis:
type-aliases-package: com.javasm
mapper-locations: classpath:mapper/*/*.xml
configuration:
map-underscore-to-camel-case: true
- 在配置类上添加@MapperScan注解指定dao接口的包名
直接对指定包下的接口创建代理对象注册容器
8.事务(重要)
阅读DATASourceTransactionManagerAutoConfiguration配置类。该类中已注册了DataSourceTransactionManager事务管理器对象到容器。
开启事务注解的识别,在服务层方法上需要开启事务的地方使用@Transactional注解。
@EnableTransactionManagement//启用事务注解识别
9.分页(重要)
- 添加pagehelper启动器
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
- 设置分页参数合理化
pagehelper:
reasonable: true
其他:
关闭或修改启动banner
//关闭banner
SpringApplication springApplication = new SpringApplication(Application.class);
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
在resources目录下放置banner.txt则可替换启动banner
欢迎页:
在四个静态资源目录下放置index.html。即是欢迎页,优先级从高到底。