定制错误页面
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