spring系列课程 spring boot(mercyblitze)1-7

https://segmentfault.com/n/1330000009887617 

技术发展的历史和脉络

微服务就是更小力度的SOA

 

 

 REST: json,xml,http

 

 热点:负载均衡解决热点问题

配置:可以是分布式的也可以是本地的,关键就是监控配置文件的内容变化,然后做出反应

安全:前端安全xss,认证、授权、单点登录

 

spring boot内容

spring framwework设计模式

 gof23

 

被动回收

 

 

如何读源码: 

一般接口就是入口

查看接口的行为的实现方法

找关键代码,互忽略细节

idea全文搜索:

CTRL + H

jsp 资源加载方式:

SpEL

 Serverlet调用链

答疑:

内存回收,java gc是被动回收

停顿

动静分离

请求
资源定位(URI)
请求协议(Protocol)
请求方法(Method)
请求参数(Parameter)
请求主体(Body)
请求头(Header)
Cookie
响应
响应头(Header)
响应主体(Body)

标准优化技术
资源变化
相应头:Last-Modified(初次访问没有缓存得到的响应数据)(第一次响应)服务器告诉浏览器资源最近的修改时间
请求头:If-Modified-Since(第二次请求带上,如果服务器返回304表示资源没有变化,浏览器就会使用本地缓存数据)


资源缓存
相应头:ETag(初次访问没有缓存得到的响应数据,用ETag标记)
请求头:If-None-Match(第二次请求带上该资源ETag标记,如果服务器返回304表示资源没有变化,浏览器就会使用本地缓存数据)

spring解析servlet jsp

 文档:

 通过配置参数找到对应的java类

配置类的注解:

spring周边

调用过程:

request incoming -> 

javax.servlet.http.HttpServlet#service--> 

org.springframework.web.servlet.DispatcherServlet#doDispatch--> 

ik.starriver.log.controller.EventController#getPage

spring rest

Spring Boot REST
核心接口
定义相关
@Controller
@RestController
映射相关
@RequestMapping
@PathVariable
请求相关
@RequestParam
@RequestHeader
@CookieValue
RequestEntity
响应相关
@ResponseBody
ResponseEntity

consumes = MediaType.APPLICATION_XML_VALUE, //精确匹配request header的Accept内容
produces = MediaType.APPLICATION_XML_VALUE) //相应数据解析成相应类型

@RestController
public class XMLRestController {

    @GetMapping(path = "/xml/user",
            consumes = MediaType.APPLICATION_XML_VALUE, //精确匹配request header的Accept内容
            produces = MediaType.APPLICATION_XML_VALUE) //相应数据解析成相应类型
    public User user() {

        User user = new User();

        user.setName("XML");
        user.setAge(30);

        return user;
    }


}

rest文档生成

HATEOAS

提供模型的服务接口api信息:

HttpServlet.service根据method处理不同请求:

Servlet on Spring Boot

组件: 扫描 \ 注册 HttpServlet

filter: 扫描 \ 注册 Filter

listener: 扫描 \ 注册 XXXXListener

通过context获取bean(以dataSource为例):

@SpringBootApplication
@EnableTransactionManagement
@EnableAsync
@EnableJpaRepositories(basePackages = {"ik.starriver.msgcenter"})
//@MapperScan("ik.starriver.msgcenter.mappers")
//@ComponentScan(basePackages = {"ik.starriver.msgcenter"})
public class MsgCenterApplication {


    private static final Logger logger = LoggerFactory.getLogger(MsgCenterApplication.class);

    public static void main(String[] args) throws NamingException, SQLException {
        SpringApplication application = new SpringApplication();
        ConfigurableApplicationContext applicationContext = application.run(MsgCenterApplication.class, args);
        BasicDataSource dataSource  = (BasicDataSource) applicationContext.getBean("dataSource");
        Statement statement = dataSource.getConnection().createStatement();
        ResultSet resultSet = statement.executeQuery("SHOW DATABASES;");
        while(resultSet.next()){
            String result = resultSet.getString(1);
            logger.debug(result);

        }
        logger.debug("started");
}

spring boot 嵌入式web容器Tomcat

查看端口所属进程:

lsof -i:8000

源码:

ServletWebServerFactoryCustomizer.customize读取配置文件的Servlet、server、Tomcat相关属性设置,配置文件内容例如:
server:
  servlet:
    contextPath: /shen
  port: 9000

有默认值用原生型int,有null的值用对象型Integer

开发技巧

查询autoConfiguration的属性

1 find in path (ctrl+h) open in find window

2

3

4

BodyMap

FailedBodyMap

postman:

http://localhost:8080/jdbc/user/1/

http://localhost:8080/jdbc/users/

http://localhost:8080/jdbc/user/

https://search.maven.org/classic/

按类名搜索:

html

json

xml

HATEOAS 

RestClient

导入库的正确芝士:

org.apache.commons.dbcp2.BasicDataSource

参考视频41分钟

如何在application.properties中添加相关的dbcp的配置项

参考视频43分钟

单连接方式

dbcp方式

在不知道返回对象的column情况下,解析数据

mvc的写法:

service\UserService.java:
domain\UserServiceImpl.java:
controller\JDBCController.java:

用单词的方式记忆api

书籍推荐:

Spring Cloud微服务实战 翟永超 著

如何研究源码(以mybatis为例,分析api接口org.apache.ibatis.session.Configuration如何获取xml配置信息):

xml设置

代码读取配置的属性并进行设置 

如果忘记了设置方面的细节,可以查看视频和相应课件。

将varchar转换成json类型

invocation.proceed决定是否执行Signature的反射

MyBatis Generator

资源地址:http://www.mybatis.org/generator/index.html

mybatis-config.xml

使用mybatis时配置xml文件几种方式:

1 手写生成映射文件UserMapper2.xml

2 MBG生成映射文件UserCopy1Mapper.xml

3 annotation

4 starter的方式:

mybatis-spring-boot-starter ----> MybatisAutoConfiguration
/jdbc/mybatis/user/{id}/
/jdbc/mybatis/generator/user/{id}/
/jdbc/mybatis/annotation/mapper/user/{id}/

/jdbc/mybatis/starter/mapper/user/{id}/ 

mapper实现的方式:

xml:常用的,可以通过MBG自动生成sql和结果集映射

annotation:手动编码定义,会在jar包的classpath中,不方便查询

domain和Entity的区别:

domain有2种,富domian包含状态和操作(如update),贫domain一般是pojo,JavaBeans

Entity = ID + JavaBeans

domain更关注逻辑描述,Entity更关注持久

JPA的问题:

可以操作开关二级缓存,但不能操作一级缓存

消极锁:数据库的锁

乐观锁:加个版本

查看所有bean属性配置信息,可以通过该信息找到需要配置的bean的class

http://localhost:9000/actuator/configprops

发布了105 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/github_38596081/article/details/104076374
今日推荐