• Spring Boot 06 —— 定制错误页面 Servlet容器 ;安装和使用Docker ; 数据访问


    定制错误页面   

    1)有模板引擎的情况下: error/状态码;  

    将错误页面 命名为 错误状态码.html  ( 404.html ) 放在模板引擎文件夹下的 error 文件夹下。如果发生此状态码的错误就会来到该页面。

    还可以使用 4xx 和 5xx 作为错误页面的文件名 ( 4xx.html ),用来匹配这些错误。 但是会优先寻找 精确命名的 错误页面。 如 404 或先找到 404.html ,找不到再找 4xx.html

    在模板页面能获取到的信息:

      timestamp:时间戳

      status:状态码

      error:错误提示

      exception:异常对象

      message:异常信息

      erors: JSR303数据校验的错误都在这里。

    2)没有模板引擎(或者在模板引擎下找不到页面),会在静态文件夹下找错误页面

    3)以上都没有页面,就会使用Spring Boot 默认页面。

    Servlet容器

          1)修改servlet容器相关配置

    #修改端口
    server.port=8081
    #修改项目访问路径 
    server.context‐path=/crud
    
    //通用的Servlet容器设置 
    server.xxx 
    //Tomcat的设置 
    server.tomcat.xxx
    

      2)编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet容器的 配置

    Linux 安装和使用Docker 

     1)系统内核要 3.10  , uname -r 查看系统内核

     2)安装Docker 

    yum install docker
    

     

     3) 启动Docker,查看版本号,设置开机自启动,停止命令

    systemctl start docker
    #查看版本号
    docker -v
    
    #设置开机自启动
    systemctl enable docker
    
    #停止docker
    systemctl stop docker
    

      查看Docker 启动状态: systemctl status docker

     常用操作

     1)镜像操作 :

    #搜索镜像:实际上是在 docker hub (https://hub.docker.com/) 里边搜索镜像

    docker search mysql

    #拉取镜像

    docker pull mysql 下载最新版本。docker pull mysql:tag tag是版本号,从 docker hub 官网查看

     #查看本地下载好的镜像

    docker images

    #删除镜像

    docker rmi Image-Id

     2)容器操作:

    #由镜像启动(安装)容器

    docker run --name mytomcat -d tomcat:latest                 mytomcat :你起的容器名;       tomcat:latest   镜像名称:版本

    #查看哪些容器正在运行 

    docker ps

    进入到docker 容器 https://blog.csdn.net/qq_33820379/article/details/81185361

    docker exec -it containerID /bin/bash           exit退出

    部署项目: https://blog.csdn.net/wchenjt/article/details/78997900

      复制文件到容器: docker cp /usr/index1.html 52d28c51edb2:/usr/local/tomcat/webapps/nav

    1、搜索镜像 [root@localhost ~]
    # docker search tomcat 
    2、拉取镜像 [root@localhost ~]
    # docker pull tomcat 
    3、根据镜像启动容器 
    docker run --name mytomcat -d tomcat:latest     ----》想要访问需要指定 端口映射
    4、docker ps   
    查看运行中的容器 
    5、 停止运行中的容器 
    docker stop  容器的id 
    6、查看所有的容器 
    docker ps -a 
    7、启动容器 
    docker start 容器id 
    8、删除一个容器  
    docker rm 容器id 
    9、启动一个做了端口映射的tomcat 
    [root@localhost ~]# docker run -d -p 8888:8080 tomcat 
    ‐d:后台运行 
    ‐p: 将主机的端口映射到容器的一个端口      主机端口:容器内部的端口   
    10、为了演示简单关闭了linux的防火墙 
    service firewalld status ;查看防火墙状态 
    service firewalld stop:关闭防火墙 
    11、查看容器的日志 
    docker logs container‐name/container‐id 
      
    更多命令参看 https://docs.docker.com/engine/reference/commandline/docker/ 可以参考每一个镜像的文档 
    

      

     注意安装MySQL 需要指定端口映射,root用户密码。  可以到 docker hub 搜索MySQL,查看文档 里边如何开始安装MySQL

     数据访问

    1)不使用内置的数据源: 使用Druid数据源 

    Druid  文档:

    https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

    https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

    1、Maven 引入数据源

    <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.20</version>
    </dependency>
    

      

    2、设置配置文件:导入自定义的数据源 Druid

    1.5的配置

    spring:
      datasource:
        #数据源基本配置
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
        type: com.alibaba.druid.pool.DruidDataSource
        #数据源其他配置
        initialSize: 5
        minIdle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        #配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,log4j
        maxPoolPreparedStatementPerConnectionSize: 20
        useGlobalDataSourceStat: true
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    

    2.0版本的问题:看看下面的这篇文字可避免问题:filters: stat,wall     ----->要把 log4j去掉,不然会报错

    https://blog.csdn.net/qq_42235671/article/details/84592028  

    spring:
      datasource:
        #数据源基本配置
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
        #指定数据源
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
          # 下面为连接池的补充设置,应用到上面所有数据源中
          # 初始化大小,最小,最大
          initial-size: 5
          min-idle: 5
          max-active: 20
          # 配置获取连接等待超时的时间
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 60000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 1 FROM DUAL
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          # 打开PSCache,并且指定每个连接上PSCache的大小
          pool-prepared-statements: true
          #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
          max-pool-prepared-statement-per-connection-size: 20
          filters: stat,wall
          use-global-data-source-stat: true
          # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
          # 配置监控服务器
          stat-view-servlet:
            enabled: true
            login-username: admin
            login-password: 123456
            reset-enable: false
            url-pattern: /druid/*
            # 添加IP白名单
            #allow:
            # 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
            #deny:
          web-stat-filter:
            enabled: true
            # 添加过滤规则
            url-pattern: /*
            # 忽略过滤格式
            exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
    

      

    强烈注意:Spring Boot 2.X 版本不再支持配置继承,多数据源的话每个数据源的所有配置都需要单独配置,否则配置不会生效

     创建表文件:在配置文件里边使用完注释掉,或者将initialization-mode修改为never

        #使用建表SQL文件
        schema:
          - classpath:sql/department.sql
          - classpath:sql/employee.sql
        initialization-mode: always
    

    spring.datasource.initialization-mode  :初始化模式(springboot2.0),其中有三个值,always为始终执行初始化,embedded只初始化内存数据库(默认值),如h2等,never为不执行初始化  

    2)导入Mybatis:

     设置自增主键 : @Options(useGeneratedKeys = true,keyProperty = "id")

        @Options(useGeneratedKeys = true,keyProperty = "id")
        @Insert("insert into department ( departmentName ) values ( #{departmentName} )")
        public int insertDept(Department department);
    

      

    修改配置,使用驼峰命名法: 添加配置文件

    package cn.anitano.springbootmybatis.config;
    
    import org.apache.ibatis.session.Configuration;
    import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
    import org.springframework.context.annotation.Bean;
    
    @org.springframework.context.annotation.Configuration
    public class MybatisConfig {
        @Bean
        public ConfigurationCustomizer configurationCustomizer(){
            return  new ConfigurationCustomizer(){
                @Override
                public void customize(Configuration configuration) {
                    configuration.setMapUnderscoreToCamelCase(true);
                }
            };
        }
    }
    

      

    在主配置文件上添加  注解:指定扫描某个包里边的是Mapper,将接口扫描装配到bean中,这个包下边就不用添加 @Mapper注解了。

    @MapperScan("cn.anitano.springbootmybatis.mapper")
    

      

    3)注解版

    有在主程序添加 MapperScan ,不用添加@Mapper
    package cn.anitano.springbootmybatis.mapper;
    
    import cn.anitano.springbootmybatis.bean.Department;
    import org.apache.ibatis.annotations.*;
    
    //@Mapper
    public interface DepartmentMapper {
        @Select("select * from department where id =#{id}")
        public Department getDeptById(Integer id);
    
        @Delete("delete from department where id=#{id}")
        public int deleteDeptById(Integer id);
    
        @Options(useGeneratedKeys = true,keyProperty = "id")
        @Insert("insert into department ( departmentName ) values ( #{departmentName} )")
        public int insertDept(Department department);
    
        @Update("update department set departmentName=#{departmentName} where id=#{id}")
        public int UpdateDept(Department department);
    
    }
    

      

    4)配置文件版

     官方文档 https://mybatis.org/mybatis-3/getting-started.html

    添加配置文件:mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!--开启驼峰命名法-->
        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
    </configuration>
    

      

    添加Mapper.xml :  EmployeeMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="cn.anitano.springbootmybatis.mapper.EmployeeMapper">
        <!--public Employee getEmpById(Integer id);-->
        <select id="getEmpById" resultType="cn.anitano.springbootmybatis.bean.Employee" parameterType="int">
            select * from employee where id=#{id}
        </select>
        <!--public int insertEmp(Employee employee);-->
        <insert id="insertEmp" parameterType="cn.anitano.springbootmybatis.bean.Employee">
            insert into employee (id,lastName,email,gender,d_id) values (#{id},#{lastName},#{email},#{gender},#{did})
        </insert>
    </mapper>
    

      

     在配置文件添加配置:指定配置文件的位置,和mapper.xml的位置

    mybatis:
      config-location: classpath:mybatis/mybatis-config.xml
      mapper-locations: classpath:mybatis/mapper/*.xml
    

      

    q

  • 相关阅读:
    表单
    框架
    表格
    列表
    标签
    封装类(包装类)
    常见类 --Object
    日志
    异常
    选择结构
  • 原文地址:https://www.cnblogs.com/Lemonades/p/11666218.html
Copyright © 2020-2023  润新知