常用功能模块配置

2024-04-15 10:38
文章标签 配置 常用 功能模块

本文主要是介绍常用功能模块配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

整合HikariCP

  1. pom中引入数据源驱动与mybatis依赖
<!-- mysql驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.41</version>
</dependency>
<!-- mybatis -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.0</version>
</dependency>
  1. 在yml中配置数据源和mybatis
############################################################
#
# 配置数据源信息
#
############################################################
spring:datasource:                                           # 数据源的相关配置type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCPdriver-class-name: com.mysql.jdbc.Driver          # mysql驱动url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=trueusername: rootpassword: roothikari:connection-timeout: 30000       # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒minimum-idle: 5                 # 最小连接数maximum-pool-size: 20           # 最大连接数auto-commit: true               # 自动提交idle-timeout: 600000            # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟pool-name: DateSourceHikariCP     # 连接池名字max-lifetime: 1800000           # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000msconnection-test-query: SELECT 1############################################################
#
# mybatis 配置
#
############################################################
mybatis:type-aliases-package: com.tolman.pojo          # 所有POJO类所在包路径mapper-locations: classpath:mapper/*.xml      # mapper映射文件
  1. 内置tomcat
############################################################
#
# web访问端口号  约定:8088
#
############################################################
server:port: 8088tomcat:uri-encoding: UTF-8max-http-header-size: 80KB

通用Mapper接口所封装的常用方法

  1. 首先先来看一下MyMapper所继承的父类,如:
interface MyMapper<T> extends Mapper<T>,MySqlMapper<T>

这里有两个父类,Mapper<T>MySqlMapper<T>,我们可以打开MySqlMapper<T>看一下:

interface MySqlMapper<T> extends InsertListMapper<T>,InsertUseGeneratedKeysMapper<T>{}

这里面又继承了了两个mapper,从类名上可以看得出来,是用于操作数据库的,这两个类里又分别包含了如下方法,简单归类一下:

方法名操作备注
insertList(list)数据批量插入主键须自增
insertUseGeneratedKeys(record)插入表数据主键须自增

很明显,在传统JavaWeb开发,这两个方法使用是没有问题的,但是我们的数据库表主键设计肯定是全局唯一的,所以不可能使用自增长id,所以这两个方法在我们开发过程中是不会使用的!


  1. 随后再来看一下Mapper<T>中所继承的父类,如下:
interface Mapper<T> extends BaseMapper<T>,ExampleMapper<T>,RowBoundsMapper<T>,

分别来看一下各个父类中的方法有些啥?

  • BaseMapper<T>
方法操作
BaseSelectMapperT selectOne(T record)根据实体类中的属性查询表数据,返回单个实体
List select(T record)根据实体类中的属性查询表数据,返回符合条件的list
List selectAll()返回该表所有记录
int selectCount(T record)根据条件查询记录数
T selectByPrimaryKey(Object key)根据主键查询单挑记录
boolean existsWithPrimaryKey(Object key)查询主键是否存在,返回true或false
BaseInsertMapperint insert(T record)插入一条记录,属性为空也会保存
int insertSelective(T record)插入一条记录,属性为空不保存,会使用默认值
BaseUpdateMapperint updateByPrimaryKey(T record)根据实体类更新数据库,属性有null会覆盖原记录
int updateByPrimaryKeySelective(T record)根据实体类更新数据库,属性有null改属性会忽略
BaseDeleteMapperint delete(T record)根据实体类中属性多条件删除记录
int deleteByPrimaryKey(Object key)根据主键删除记录
  • ExampleMapper<T>,Example类是用于提供给用户实现自定义条件的,也就是where条件,主要方法见如下表格:
方法操作
SelectByExampleMapperList selectByExample(Object example)根据条件查询记录list
SelectOneByExampleMapperT selectOneByExample(Object example)根据条件查询单条记录
SelectCountByExampleMapperint selectCountByExample(Object example)根据条件查询记录数
DeleteByExampleMapperint deleteByExample(Object example)根据条件删除记录
UpdateByExampleMapperint updateByExample(T record, @Param(“example”) Object example);根据条件更新数据,null会覆盖原数据
UpdateByExampleSelectiveMapperint updateByExampleSelective(T record, Object example);根据条件更新数据,null会忽略
  • RowBoundsMapper<T>,这个是用于做分页的,我们在后续阶段中会使用page-helper这个组件来替代这个分页实现。
总结

通用mapper所提供的CRUD方法对单表操作,大大提高开发效率,当然复杂的多表操作还是需要在mapper.xml中自己去编写sql代码实现。

事务传播

事务传播 - Propagation
  • REQUIRED: 使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法是必须运行在一个事务中的;如果当前存在事务,则加入这个事务,成为一个整体

  • SUPPORTS: 如果当前有事务,则使用事务;如果当前没有事务,则不使用事务

  • MANDATORY: 该传播属性强制必须存在一个事务,如果不存在,则抛出异常

  • REQUIRES_NEW: 如果当前有事务,则挂起该事务,并且自己创建一个新的事务给自己使用,如果当前没有事务,则同 REQUIRED

  • NOT_SUPPORTED: 如果当前有事务,则把事务挂起,自己不适用事务去运行数据库操作

  • NEVER: 如果当前有事务存在,则抛出异常

  • NESTED: 如果当前有事务,则开启子事务(嵌套事务),嵌套事务是独立提交或者回滚;

    如果当前没有事务,则同 REQUIRED。但是如果主事务提交,则会携带子事务一起提交。

    如果主事务回滚,则子事务会一起回滚。相反,子事务异常,则父事务可以回滚或不回滚

Cookie和Session

Cookie
  • 以键值对的形式存储信息在浏览器
  • cookie不能跨域,当前及其父级域名可以取值
Session
  • 基于服务器内存的缓存(非持久化),可保持请求会话
  • 每个session通过sessionid来区分不同请求
  • session可设置过期时间
  • session也是一键值对形式存在的

Swagger2文档API

  1. 配置依赖
<!-- swagger2 配置 -->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.4.0</version>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.4.0</version>
</dependency>
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.6</version>
</dependency>

在这里插入图片描述
在这里插入图片描述
http://localhost:8088/swagger-ui.html
http://localhost:8088/doc.html

SpringBoot Log日志

SpringBoot 日志

  1. 移除默认日志
<exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion>
</exclusions>
  1. 添加日志框架依赖
<!--引入日志依赖 抽象层 与 实现层-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version>
</dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version>
</dependency>
  1. 创建log4j.properties并且放到资源文件目录src/main/resources
log4j.rootLogger=DEBUG,stdout,file
log4j.additivity.org.apache=truelog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%nlog4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.Threshold=INFO
log4j.appender.file.append=true
log4j.appender.file.File=/workspaces/logs/foodie-api/mylog.log
public static final Logger logger =LoggerFactory.getLogger(ServiceLogAspect.class);if (takeTime > 3000) {logger.error("====== 执行结束,耗时:{} 毫秒 ======", takeTime);} else if (takeTime > 2000) {logger.warn("====== 执行结束,耗时:{} 毫秒 ======", takeTime);} else {logger.info("====== 执行结束,耗时:{} 毫秒 ======", takeTime);}

通过日志监控service执行时间

  1. 添加切面依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  1. 编写AOP类ServiceLogAspect
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;@Aspect
@Component
public class ServiceLogAspect  {public static final Logger logger =LoggerFactory.getLogger(ServiceLogAspect.class);/*** AOP通知:* 1. 前置通知:在方法调用之前执行* 2. 后置通知:在方法正常调用之后执行* 3. 环绕通知:在方法调用之前和之后,都分别可以执行的通知* 4. 异常通知:如果在方法调用过程中发生异常,则通知* 5. 最终通知:在方法调用之后执行*//*** 切面表达式:* execution 代表所要执行的表达式主体* 第一处 * 代表方法返回类型 *代表所有类型* 第二处 包名代表aop监控的类所在的包* 第三处 .. 代表该包以及其子包下的所有类方法* 第四处 * 代表类名,*代表所有类* 第五处 *(..) *代表类中的方法名,(..)表示方法中的任何参数** @param joinPoint* @return* @throws Throwable*/@Around("execution(* com.tolman.service.impl..*.*(..))")public Object recordTimeLog(ProceedingJoinPoint joinPoint) throws Throwable {logger.info("====== 开始执行 {}.{} ======",joinPoint.getTarget().getClass(),joinPoint.getSignature().getName());// 记录开始时间long begin = System.currentTimeMillis();// 执行目标 serviceObject result = joinPoint.proceed();// 记录结束时间long end = System.currentTimeMillis();long takeTime = end - begin;if (takeTime > 3000) {logger.error("====== 执行结束,耗时:{} 毫秒 ======", takeTime);} else if (takeTime > 2000) {logger.warn("====== 执行结束,耗时:{} 毫秒 ======", takeTime);} else {logger.info("====== 执行结束,耗时:{} 毫秒 ======", takeTime);}return result;}
}

在这里插入图片描述

开启MyBatis日志Sql打印

  1. 修改配置文件application.yml
mybatis:type-aliases-package: com.tolman.pojo          # 所有POJO类所在包路径mapper-locations: classpath:mapper/*.xml      # mapper映射文件configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述
在这里插入图片描述

SpringBoot 整合 mybatis-pagehelper

  1. 引入分页插件依赖
<!--pagehelper -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.12</version>
</dependency>
  1. 配置yml
# 分页插件配置
pagehelper:helperDialect: mysqlsupportMethodsArguments: true
  1. 使用分页插件,在查询前使用分页插件,原理:统一拦截sql,为其提供分页功能
/*** page: 第几页* pageSize: 每页显示条数*/
PageHelper.startPage(page, pageSize);
  1. 分页数据封装到PagedGridResult.java传给前端
PageInfo<?> pageList = new PageInfo<>(list);
PagedGridResult grid = new PagedGridResult();
grid.setPage(page);
grid.setRows(list);
grid.setTotal(pageList.getPages());
grid.setRecords(pageList.getTotal());

Nginx核心配置

在这里插入图片描述

  1. 设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody

    user root;
    
  2. worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行

    worker_processes 1;
    
  3. nginx 日志级别debug | info | notice | warn | error | crit | alert | emerg,错误级别从左到右越来越大

  4. 设置nginx进程 pid

    pid        logs/nginx.pid;
    
  5. 设置工作模式

    events {# 默认使用epolluse epoll;# 每个worker允许连接的客户端最大连接数worker_connections  10240;
    }
    
  6. http 是指令块,针对http网络传输的一些指令配置

    http {
    }
    
  7. include 引入外部配置,提高可读性,避免单个配置文件过大

    include       mime.types;
    
  8. 设定日志格式,main为定义的格式名称,如此 access_log 就可以直接使用这个变量了
    图片描述

    参数名参数意义
    $remote_addr客户端ip
    $remote_user远程客户端用户名,一般为:’-’
    $time_local时间和时区
    $request请求的url以及method
    $status响应状态码
    $body_bytes_send响应客户端内容字节数
    $http_referer记录用户从哪个链接跳转过来的
    $http_user_agent用户所使用的代理,一般来时都是浏览器
    $http_x_forwarded_for通过代理服务器来记录客户端的ip
  9. sendfile使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush,是指当数据表累积一定大小后才发送,提高了效率。

      sendfile        on;tcp_nopush      on;
    
  10. keepalive_timeout设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。

    #keepalive_timeout  0;
    keepalive_timeout  65;
    
  11. gzip启用压缩,html/js/css压缩后传输会更快

    gzip on;
    
  12. server可以在http指令块中设置多个虚拟主机

    • listen 监听端口
    • server_name localhost、ip、域名
    • location 请求路由映射,匹配拦截
    • root 请求位置
    • index 首页设置
        server {listen       88;server_name  localhost;location / {root   html;index  index.html index.htm;}}
    

// TODO

这篇关于常用功能模块配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/905584

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal