自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 收藏
  • 关注

原创 logback日志配置

springboot默认使用logback 无需额外添加pom依赖。

2024-02-02 13:24:14 1774

原创 spring问题点

同一个类中 事务A调非事务B B抛异常 AB事务生效(具有传播性)同一个类中 事务A调非事务B A抛异常 AB事务生效也就是主方法加了事务注解 则方法内调用的其他本类方法无需加事务注解,发生异常时可以保证事务的回滚最常用。

2024-02-02 11:28:37 904

原创 npc内网穿透

官网:https://ehang-io.github.io/nps代码:https://github.com/ehang-io/nps/releases。

2024-01-31 11:04:11 1141

原创 Linux常用命令

1.进入容器2.查看容器时间date -R3.在容器中创建文件4. 回到宿主机 复制宿主机的文件到容器 mynginx为文件名5.进入容器 复制文件备注:not writing through dangling symlink '/etc/localtime’错误 进到容器的etc文件夹 删除localtime文件 再复制就可以了。

2024-01-30 16:43:47 1916

原创 jenkins部署(docker)

docker部署,避免安装tomcat。

2024-01-30 15:12:52 1866

原创 常用软件安装

yum-config-manager --disable mysql57-community #禁用mysql的5.x系列。yum-config-manager --enable mysql80-community #启用mysql的8.x系列。这样就可以本地和远程登录了。快速:sed -i ‘s/enforcing/disabled/’ /etc/selinux/config。然后修改/usr/lib/systemd/system/redis.service 指定配置文件位置。

2024-01-27 18:34:40 959

原创 harbor安装

docker tag hello-world:latest 192.168.56.10:88/llzzpp/hello-world:[镜像版本号]1下载地址:https://github.com/docker/compose/releases。/lzp/harbor/harbor为harbor解压后的路径。进到harbor安装目录 /lzp/harbor/harbor。cd /lzp/harbor/harbor #压缩包解压目录。如果都显示启动成功,说明自启动配置成功。2.改文件名后将文件复制到。

2024-01-27 16:18:59 1097

原创 bean的实例化和初始化

Instantiation:表示实例化,对象还未生成Initialization:表示初始化,对象已经生成InstantiationAwareBeanPostProcessor继承自BeanPostProcessor,它内部提供了3个方法,再加上BeanPostProcessor接口内部的2个方法,所以实现这个接口需要实现5个方法。1.postProcessBeforeInstantiation()–自定义对象–>postProcessAfterInitialization();//一般不会走。

2023-06-26 15:27:55 604

原创 mapstruct对象转换

【代码】mapstruct对象转换。

2023-06-14 15:36:50 226

原创 SpringbootTest

方法1:直接使用@SpringBootTest注解直接使用@SpringBootTest注解,然后添加测试方法,直接注入需要的类,这种方式在运行测试方法时会启动spring容器,数据库等采用项目的默认配置,如果项目过大,测试会很慢。方法2:按需加载只加载测试需要的类,采用H2数据库,不影响项目数据库的数据。运行速度快。

2023-06-14 14:50:28 4428

原创 spring实例化bean之循环依赖

Class

2023-06-06 13:30:40 647

原创 spring实例化bean整体流程

调用doGetBean方法这个方法的功能就是实例化所有bean。调用createBean方法创建bean及bean中注入的bean;调用getSingleton将创建的bean放到beanFactory的registeredSingletons属性中;调用getObjectForBeanInstance完成mapper接口的代理对象mapperProxy的创建。

2023-06-06 13:30:11 600

原创 aop原理

定义一个切面类,指定增强的方法,方法前两个注解必须有(…)) 代表 com.lzp包下所有包下controller包下所有类的所有方法都会被代理,就代表所有,第一个是所有方法的返回值,第一个前面还有方法修饰符,public之类的,缺省就表示所有修饰符,最后一个代表所有方法名,(…)代表方法参数,…是指所有参数,倒数第二个代表类,第二个*代表包。这样调用对应包下的方法时就会被增强。所以顺序就是 修饰符 返回值 包名 类名 方法名 方法参数try {

2023-06-06 13:29:45 527

原创 spring实例化bean之实例化

doGetBean中调用getSingleton方法中调用singletonFactory.getObject()触发lambda表达式中的createBean方法。主要工作是解析参数,然后调用默认构造实例化bean。创建bean 填充bean 初始化bean。

2023-06-06 13:29:04 635

原创 spring实例化bean属性填充

else {//终止属性填充 暂时不考虑 if(!if(!break;return;// @Bean(autowire = Autowire.BY_NAME) 这种暂时不考虑 从来没用过 int resolvedAutowireMode = mbd . getResolvedAutowireMode();

2023-06-06 13:27:57 437

原创 spring注册beanDefinition

代码使用springboot测试。

2023-05-18 16:27:18 918

原创 springboot整合mybatis的整体流程

也就是前端调接口,然后调service,然后调mapper的方法时做的工作。也就是springboot启动时做的工作。也就是查询出结果后做的工作。

2023-05-12 17:59:30 884

原创 执行增删改查时的结果处理

通过 handleRowValues 方法来映射 ResultSet 结果,并将并将映射的结果从 defaultResultHandler 的 ResultList 方法中取出存入 multipleResults 中,完成映射。查询最终走到PreparedStatementHandler类的query方法,执行查询后调用DefaultResultSetHandler类的handleResultSets方法。关键类ResultSetWrapper,保存要映射的字段集合和查询出的数值的字节数组。

2023-05-12 17:57:50 612

原创 执行增删改查时获取SQL语句

查询方法由SqlSessionTemplate中创建DefaultSqlSession,然后执行DefaultSqlSession的selectList方法。这里如果参数是${}这样的,就会走DynamicSqlSource类的getBoundSql。然后执行MixedSqlNode类apply方法把 ${}的内容替换成真实数据。关键方法是这个getBoundsql,就是通过这个方法获取到sql的。然后执行BaseExecutor类的query方法。SimpleExecutor类的doQuery方法。

2023-04-28 17:50:44 1832

原创 执行增删改查时的传参处理

在执行查询前会调用 method.convertArgsToSqlCommandParam(args)方法,这就是处理方法参数的。MapperMethod的invoke 方法会调用MapperMethod的execute方法。paramNameResolver.getNamedParams(args)方法。处理完参数继续查询方法,将处理完的参数传入。传入的是数组类型,转换成map。

2023-04-28 13:54:15 130

原创 XMLMapperBuilder解析*mapper.xml

就是xml中每个方法定义的resultMap或实体类型的resultType。parse方法是被循环调用的,也就是每个mapper.xml都会执行一次。configuration关键属性。每个xml中定义的sql标签。

2023-04-27 17:53:26 1006

原创 8.系统日志

1.如果有operatelog注解,且enable属性为true则肯定要记录(例如在get方法上加这个注解则也可以记录日志,在post方法加这个注解并且指定enable为false则不记录日志)2.如果没有 @operateLog 注解,只有Operation注解默认只记录 POST、PUT、DELETE方法。OperateLogAspect类的around0方法,里面的关机方法是this.log方法。然后就是保存日志到infra_api_access_log数据库。判断方法,也就是判断是否需要记录日志。

2023-04-27 14:28:26 555

原创 7.参数校验

在controller和service进行前端传参校验,保证存到数据库的数据是正确的这里无需指定版本,因为sprongboot已经引入了对应版本的依赖。拦截异常是为了返回固定数据格式给前端普通参数(非 java bean)校验出错时抛出ConstraintViolationException异常请求体绑定到java bean上,且校验参数失败时抛出 MethodArgumentNotValidException异常表单绑定到 java bean 出错时,会抛出 BindException 异常

2023-04-27 10:16:04 696

原创 6.登录token

登录时生产token和refreshtoken,请求时带上token,后台校验,通过的话则进行处理,否则返回错误信息(token失效过期等等),校验不通过会调用刷新token的接口,重新获取token,如果refreshtoken的话。对应数据库表结构。

2023-04-26 17:56:04 1627 1

原创 5.数据权限

yudao-spring-boot-starter-biz-data-permission 模块yudao-module-system模块。

2023-04-23 21:56:17 2407

原创 4.功能权限

例如yudao-module-infra 模块的 SecurityConfiguration ()类。

2023-04-22 17:45:05 861

原创 3.异常处理

Filter会在controller之前调用,所以需要单独处理,可以try catch捕获,然后在catch中返回给前端错误信息。拦截token,如果有异常调用GlobalExceptionHandler类的allExceptionHandler方法,如果某个controller抛出异常,这里就可以捕获到,然后返回给前端对应的错误信息。传入请求和异常,然后对异常类型进行判断,如果都没有进判断,就用兜底方法。如果有异常,会被兜底方法捕获。直接调静态方法,抛出自定义的异常。

2023-04-18 17:43:57 179

原创 springboot2.4.2源码构建

需要下载gradle,配置环境变量。然后点构建,等待构建完成即可。找测试启动类启动即可。

2023-04-13 15:02:36 170

原创 5.2.1源码构建

idea打开项目后,会自动构建,自动下载 gradle/wrapper/gradle-wrapper.properties文件中的gradle版本,这里就默认下载就行。如果没有gradle,需要安装一个,不然会默认下载一个gradle,而且会在C盘。报错的话,注释代码检查。配置本地仓库环境变量。

2023-04-13 11:28:36 86

原创 自定义注解+redis实现简单接口限流

/ 在 second 秒内,最大只能请求 maxCount 次 int second() default 1;@Target({ElementType.METHOD,ElementType.TYPE}) 指定这个注解可以用在方法或者类上(或者接口)@Retention(RetentionPolicy.RUNTIME) 指定注解的生命周期是运行时。首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。

2023-04-08 15:20:55 258

原创 2.banner

需要在启动时执行一些功能时,可以实现两个接口:CommandLineRunner、ApplicationRunner。

2023-03-14 13:15:21 99

原创 1.项目结构及pom结构

dependencyManagement主要作用是先把依赖添加进来,但是不做引入,子项目想用这些得手动引入,如果指定版本就用子项目指定的版本,没加版本就用这个父pom中定义的版本。主要就是指定项目版本、控制项目引入的模块、指定maven编译的java版本、指定maven编译顺序等等。这个pom负责项目启动的时候加载哪些模块以及maven打jar包的规则,自己新建的模块要在这里引入。功能模块,开发中自己的功能就可以按照这种规则新建模块,然后实现自己的业务逻辑。就一个pom文件,管理所有依赖的版本。

2023-03-13 17:30:04 308

原创 springboot整合mybatis

mapper是一个接口,接口不能实例化,也就是不能干活,想让他干活的话就要用动态代理,找一个代理类帮他干活。mapper.xml有具体的sql,想让它执行就要把mapper接口的方法和xml中的sql关联起来。springboot整合mybaits的问题mapper怎么被spring注册为beanDefinitionmapper怎么被实例化mapper方法怎么被执行。

2022-11-27 19:34:19 11179

原创 jenkins构建gitee项目

然后根据初始密码,创建账号,下载推荐插件、 maven插件、publish over ssh。这里配置本机地址不行,配置远程服务器地址的话应该就没问题了。在windows编辑后,运行脚本会报文件或目录找不到。构建完成后,会将jar包传到目标服务器,然后运行。配置远程服务器,就是代码运行的服务器。配置jenkins构建前运行脚本。配置gitee webhook。新建maven任务后配置任务。如果有项目名称还需要增加路径。对应git上pom的位置。然后配置jenkins。配置构建后执行的命令。

2022-11-20 12:44:14 1832

原创 6.jeecg的pom结构

这个有点多,主要作用是先把依赖添加进来,但是不做引入,子项目想用这些得手动引入,如果指定版本就用子项目指定的版本,没加版本就用这个父pom中定义的版本。包括base-core、demo、system三个 air为自己新建。除了自带的注释,其他的不知道是干啥的。这个是主动引入的依赖,子pom会继承。主要负责启动,没有业务代码。pom中就是大部分依赖。

2022-11-15 17:55:51 646

原创 5.jeecg的登录及权限(jwt+shiro)

controller先验证验证码然后验证用户是否有效然后验证用户名和密码,通过的话会生成token生成tokenJWTToken刷新生命周期 (实现: 用户在线操作不掉线功能)

2022-11-13 11:11:40 3943

原创 mybatis使用事务

在service实现类方法上加@Transactional(rollbackFor = Exception.class)调用本类中的方法,会导致被调用的方法的@Transactional注解失效,原因是没有使用代理。rollback是产生该异常时会回滚 不加默认是RuntimeException级别。实现ApplcationContextAware接口。1.新建一个实现类去调用原实现类中的方法。这样产生异常时 数据库就不会执行更改了。这样再调用本类的方法就可以了。2.采用代理的方式调用。

2022-11-09 17:13:41 643

原创 springboot集成Knife4j(swagger)

官网:https://doc.xiaominfo.com/

2022-11-09 12:13:07 3706

原创 空指针异常处理

*而包装类 j 指定为null对象,当包装类参与运算的时候,首先会做拆箱操作,也就是调用 intValue() 方法,由于对象是空的,调用方法自然就会报空指针;同时,将一个包装类赋值给一个基本数据类型时,同样也会做拆箱操作,自然也就空指针异常了;Map、List、Set 是经常会用到的数据结构,虽然他们都包含有isEmpty()方法,能判断容器中是否包含了元素,但是无法判断自生对象是否为空,一旦对象没有实例化时,调用isEmpty()就会报空指针异常;正常使用时需要处理这个异常。

2022-11-08 12:04:02 660

原创 springboot集成mqtt

在mqttx订阅发送主题 可以收到代码端的回复。几乎所有的东西都在配置类中。发送数据至新主题,有回复。再次发送 发现没有回复。

2022-11-04 12:08:46 2013 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除