Java web开发

目录

1、Tomcat

2、JDBC    数据库统一接口规范

3、数据库连接池(避免频繁建立数据库连接,连接复用)

4、死锁

5、MyBatis

6、Spring JDBC

7、Spring事务管理


1、Tomcat

    源码是java编写,运行需要依赖jdk
    linux:export CATALINA_HOME:设置Tomcat环境变量
    
    环境变量:JAVA_OPTS
    
    Tomcat server.xml
    
    Tomcat架构,server.xml:
    <Server>
        <Service><-可以有多个service-><-即container容器->
            <Connector><-可以有多个-><-用来接收用户请求->
            </Connector>
            <Engine><-用来处理Connector接收到的用户请求-><-java代码实际由Engine来执行的->
                <Host><-可以有多个-><-虚拟主机->
                    <Context><Context><-可以有多个-><-Context即是web应用->
                </Host>
            </Engine>
        </Service>
    </Server>
    
    Connector:端口、协议、客户端连接超时ms、依赖的线程池、最大连接数(阻塞IO,即线程池的最大连接数)、请求排队长度
    Executor默认线程池:最小空闲线程数、最大线程数
    
    线程池:
        最小空闲线程数
        最大线程数
        
        
    日志:系统运行日志、访问日志、应用日志
    
    Tomcat官方文档
    

2、JDBC    数据库统一接口规范

    JDBC API :与java web程序进行通信
    JDBC Driver API :与数据库层建立连接,由数据库厂商实现,与数据库通信
    
    JDBC URL:协议jdbc、子协议:各数据库协议、主机IP、端口、数据库名称
    
    JDBC API:
        Driver:数据库驱动程序。向DriverManager注册一个驱动程序:Class.forName()
        DriverManager:驱动程序管理。获取建立数据库物理连接:DriverManager.getConnection()
        Statement:SQL的容器。conn.createStatement();stmt.execute*();
        ResultSet:stmt.executeQuery执行结果/sql查询结果。由行和列组成的二元表(基于关系型数据库是个二元表)
        SQLException:数据库相关异常
        
    步骤:装载驱动程序--获取数据库连接--执行SQL语句--获取执行结果--清理环境(close:关闭连接、释放资源)
    
    游标:提供一种客户端读取部分服务器结果集的机制。
    
    PreparedStatement:继承自Statement,在生成Statement对象时需传入sql语句
        setFetchSize():可实现游标功能,设置jdbc客户端从数据库服务端取回的数据数量
    
    ResultSet.getBinaryStream():获取执行结果的流对象
        流方式:应对大字段。将大字段内容以二进制流方式按照区间进行划分,依次读取每个区间的内容
        
    批处理:添加SQL:Statement.addBatch(); 执行SQL:Statement.executeBatch(); 清空batch中SQL语句:Statement.clearBatch();
        批量处理,提供效率,避免每次与数据库连接耗时
    
    字符集设置:show variables like '%character%' 、 show create table tableName
        server级别、数据库级别、表级别、列(字段)级别。(优先级从左至右依次提高)
        JDBC_URL + characterEncoding=utf8
        

3、数据库连接池(避免频繁建立数据库连接,连接复用)

    DriverManager.getConnection()创建数据库连接步骤(mysql):
        客户端请求建立连接--服务端返回随机密码种子--客户端发送加密密码--服务端响应连接建立成功
        客户端与服务端多次网络交互,跨机器网络传输有较大时间开销,建立连接时间花销大
    
    
    服务器端(数据库)处理sql请求会分配内存,处理完成释放,内存大小有限制,可分配资源超出限制服务器宕机,故有最大并发连接数限制
    
    客户端(java程序)对请求数据库进行限流,业务线程排队获取数据库连接,限制同时获得数据库连接的连接数
    
    DBCP连接池:Apache开源,通用连接池
        BasicDataSource:连接池对象
            url、driver、user、password
            getConnection()获取连接
            close:将数据库连接归还给连接池,重写了close方法
            设置连接池创建时预置连接数、设置连接池中最大连接数(客户端限流保护数据库)、设置线程获取连接排队等待最大时间、
            设置最大空闲连接数(减少连接数、减少资源损耗)、设置最小空闲连接数(与最大空闲连接数保持一致,避免频繁创建销毁连接)、
            定期检查:设置开启定期检查、设置销毁连接最小空闲时间、设置定期检查间隔时间(MySQL默认关闭空闲时间超过8个小时的连接,MySQL服务器关闭了连接,而客户端连接池不知道已经关闭该连接,故需要定期检查客户端连接池中的连接,关闭超出预订时间的连接,一般小于服务端连接空闲关闭时间)
        show processlist:查看数据库物理连接
    

4、死锁

    两个以上事务,争夺锁资源,互相等待
    产生的必要条件:互斥、请求和保持、不剥夺、环路等待
    
    调整SQL顺序,按序获取锁资源
    
    排它锁、共享锁
    
    加锁方式:
    
        外部加锁:
            由应用程序添加,锁依赖关系较容易分析
            共享锁(S):select * from table lock in share mode
            排它锁(X):select * from table for update
        内部加锁:
            为了实现ACID特性,由数据库系统内部自动添加
            加锁规则繁琐,与SQL执行计划、事务隔离级别、表索引结构有关
            共享锁(S)、排它锁(X)
            对数据库的更新、插入、删除,可能引起数据库内部加锁
            
    MySQL中所有select都是快照读,select查询不会加锁
        innodb实现了多版本控制(MVCC),支持不加锁快照读
        
    需要持有锁的SQL:
        select * from table lock in share mode
        select * from table for update
        update table from table set ...
        insert into ...
        delete from table ...
        
    分析死锁的常用办法:
        MySQL会自动检测死锁,并强制回滚代价最小的事务,解除死锁
        分析死锁:show engine innodb status 语句:会列出导致死锁发生的SQL语句,及回滚的SQL语句
        

5、MyBatis

    关系型数据库:数据以行和列的二元表存储
    
    ORM:建立对象到数据库表之间的映射关系
    
    
    MyBatis:区别于传统ORM框架对象到数据库表之间的映射,而是建立对对象的操作方法到SQL语句的映射
             支持自定义SQL、存储过程、视图等,开发人员可使用关系型数据库的所有特性
             使用xml配置或注解配置
             可映射基本数据元素、接口、java对象到数据库
             
    功能架构:
        API接口层:数据查询、新增、更新、删除、获取配置
        数据处理层:a、参数映射:参数映射配置、参数映射解析、参数类型解析
                    b、SQL解析:SQL获取、SQL解析、动态SQL
                    c、SQL执行:单个、批量、复用
                    d、结果映射:结果映射配置、结果类型转换、结果数据拷贝
        基础支撑层:连接管理、事务管理、配置加载、缓存处理
        
    配置:sqlSessionFactory
        事务(transactionManger:jdbc:将事务交给jdbc处理,mange:将事务交给外部容器如spring来处理,mybatis不会调用jdbc提交回滚事务)
        数据源(驱动、数据库url、用户名、密码)
        
    优势:操作简单、自定义SQL操作数据库更加灵活
    劣势:编写SQL工作量大,xml配置多,数据库移植性差
    
    resultMap
    
    dataSource type = "POOLED" 开启数据库连接池:
    
    空闲连接池队列、活跃连接池队列
    数据库最大活跃连接数、最大空闲连接数,最好设置一样大
    
    连接侦测(启用,检查连接是否有效),侦测SQL(select 1),侦测时间(小于MySQL服务端连接超时时间8小时)
      
    

6、Spring JDBC

    关注业务,封装公用操作(建立连接、执行SQL获取结果、处理异常、关闭连接等)
    
    DataSource(java提供的接口).getConnection
    DriverManagerDataSource(spring提供的DataSource实现).getConnection(每次会创建一个连接)
    BasicDataSource(Apache提供,连接池)
    
    JdbcTemplate:声明SQL及参数、执行SQL及处理结果、异常处理
    JdbcTemplate定义:new JdbcTemplate(dataSource)
    RowMapper(JdbcTemplate提供的接口,将SQL执行结果ResultSet转换为java对象)
    
    @Repository:定义一个bean,用于DAO类注解,表示会访问数据库数据
    
    NamedParameterJdbcTemplate(可定义参数名称)
    SqlParameterSource:定义参数类型
        MapSqlParameterSource(等同于直接使用Map,put KV)
        BeanPropertySqlParameterSource(将java bean作为参数),new BeanPropertySqlParameterSource(Object)
        
    异常处理:
    SqlException(checked)  --> DataAccessException(unchecked)
        


7、Spring事务管理

    
    统一的事务编程模型
    编程式事务、声明式事务(AOP切面)
    
    PlatformTransactionManger 接口:获取事务、提交事务、回滚事务
    实现:DataSourceTransactionManger(JDBC的事务管理)
          HibernateTransactionManger(Hibernate的事务管理实现)
    
    TransactionDefinition:事务定义
    事务名称、事务隔离级别、事务行为、超时时间、是否只读事务
    
    TransactionStatus:事务状态
    
    隔离级别:
        读未提交、读提交、重复读、串行化、默认
    
    传播行为:影响事务提交状态
    
    声明式事务:aop
        定义事务Advice    
        @Transactional
    

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值