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

原文地址:https://www.cnblogs.com/Lemonades/p/11666218.html