【自用】springboot 2

复习:

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。即是欢迎页,优先级从高到底。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值