java

使用spring通过aop获取方法参数和参数值

2021-09-09
目录 spring通过aop获取方法参数和参数值 自定义注解 切面 aop切面 注解.参数获取 1.定义需要切面的注解 2.在需要进行切面的方法标注注解 3.定义切面 spring通过aop获取方法参数和参数值 自定义注解 package com.xiaolc.aspect; import java.lang.annotation.*; /** * @author lc * @date 2019/9/10 */ @Documented @Target({ElementType.TYPE, Ele

Java面试题冲刺第二十九天--JVM3

2021-09-09
目录 面试题1:如何判断对象是否存活 1.引用计数算法 2.可达性分析算法 面试题2:哪些对象可以作为GC Roots? 面试题3:你了解的对象引用方式都有哪些? 1 强引用 2 软引用 3 弱引用 4 虚引用 总结 面试题1:如何判断对象是否存活 对于判断对象是否存活,主要是两种基本算法,引用计数和可达性分析,目前java主要采用的是可达性分析算法 1.引用计数算法 判断对象是否存活的方式如:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一:当引用失效时,计数器值就减一:任何

使用dynamic-datasource-spring-boot-starter实现多数据源及源码分析

2021-09-09
简介 前两篇博客介绍了用基本的方式做多数据源,可以应对一般的情况,但是遇到一些复杂的情况就需要扩展下功能了,比如:动态增减数据源.数据源分组,纯粹多库 读写分离 一主多从.从其他数据库或者配置中心读取数据源等等.其实就算没有这些需求,使用这个实现多数据源也比之前使用AbstractRoutingDataSource要便捷的多 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器. github: https://g

Java SpringMVC 异常处理SimpleMappingExceptionResolver类详解

2021-09-09
Spring3.0 对异常的处理方式总共有两种: 一种是使用 HandlerExceptionResolver 接口,并且 Spring 已经提供默认的实现类 SimpleMappingExceptionResolver. 第二种方法是在 Controller 内部实现,灵活性更高. 从目前的调查结果来看,这两种方式不能共存.我们一般在项目中使用第一种方法. 下面分别描述一下这两种使用方式: 一.基于 HandlerExceptionResolver 接口的方式 使用这种方式只需要实现 reso

Spring数据库连接池url参数踩坑及解决

2021-09-09
目录 Spring数据库连接池url参数踩坑 遇到的问题 报错情况 解决 修改数据库连接池的url后,还是连接原先的url 问题 例如 Spring数据库连接池url参数踩坑 遇到的问题 报错情况 解决 & ' 字符在xml需要转义为 ' & ' 修改数据库连接池的url后,还是连接原先的url 问题 当修改连接池url之后,访问的还是原来的数据库. 例如 原来: url=jdbc:mysql://192.168.250.227:3306/myshop?characterEncoding=

Java synchronized最细讲解

2021-09-09
目录 前言 Synchronization实现原理 先理解Java对象头与Monitor 1.对象头:锁的类型和状态和对象头的Mark Word息息相关: jdk6 之后做了改进,引入了偏向锁和轻量级锁: 1.无锁到偏向锁转化的过程 2.偏向锁升级轻量级 3.轻量级到重量级 总结 前言 线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据. 因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在

springboot + JPA 配置双数据源实战

2021-09-09
目录 springboot + JPA 配置双数据源 1.首先配置application.yml文件设置主从数据库 2.使用配置类读取application.yml配置的两个数据源 3.然后通过类的方式配置两个数据源 4.启动类主函数入口 springboot + JPA 配置双数据源 1.首先配置application.yml文件设置主从数据库 spring: servlet: multipart: max-file-size: 20MB max-request-size: 20MB prof

打印Java程序的线程栈信息方式

2021-09-09
打印Java程序的线程栈信息 jstack可以得知当前线程的运行情况 安装jstack等命令集,jstack是开发版本jdk的一部分,不是开发版的有可能找不到 yum install -y java-1.8.0-openjdk-devel 查看要打印堆栈的java进程ID jps -l 打印堆栈 sudo -u admin jstack pid > jstack.txt 特别要注意的是jstack需要使用与进程一致的用户才能正确导出堆栈,否则会报错如下 Unable to open socket

Springboot使用@RefreshScope注解实现配置文件的动态加载

2021-09-09
目录 pom.xml properties 启动类 配置类 controller 打包 springcloud对应的springboot版本 参考: spring-boot-starter-actuator提供服务健康检查和暴露内置的url接口. spring-cloud-starter-config提供动态刷新的一些支持和注解. pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xml

解决kafka消息堆积及分区不均匀的问题

2021-09-09
目录 kafka消息堆积及分区不均匀的解决 1.先在kafka消息中创建 2.添加配置文件application.properties 3.创建kafka工厂 4.展示kafka消费者 kafka出现若干分区不消费的现象 定位过程 验证 解决方法 kafka消息堆积及分区不均匀的解决 我在环境中发现代码里面的kafka有所延迟,查看kafka消息发现堆积严重,经过检查发现是kafka消息分区不均匀造成的,消费速度过慢.这里由自己在虚拟机上演示相关问题,给大家提供相应问题的参考思路. 这篇文章有点

java的几种定时器的具体使用(4种)

2021-09-09
目录 1.@Scheduled注解 2.quartz 3.使用Timer 4.使用线程控制 总结一下我使用过的4种类型的定时器:@Scheduled注解.quartz.new Timer().schedule.使用线程控制. 1.@Scheduled注解 @Scheduled注解是最简单的方式,只需要启用定时器,在方法上添加注解即可. 在spring配置中加入: <!-- 启用注解定时器 --> <task:annotation-driven /> 在要具体的方法上加入注解@Sch

Springboot如何根据实体类生成数据库表

2021-09-09
目录 Springboot 实体类生成数据库表 第一步:添加springboot-data-jpa和数据库的依赖关系 第二步:编写yml文件的配置 第三步:实体类中使用的注解 第四步:启动项目是否生成表格 第五步:启动项目即可 springboot继承JPA根据实体类生成数据库中的表 1. pom中添加的依赖 2. application.yml中配置jpa配置 定义用户实体类,通过注解映射成数据库中的表 启动springboot项目 Springboot 实体类生成数据库表 JPA:sprin

Spring boot 应用实现动态刷新配置详解

2021-09-09
目录 1. 依赖 2. 配置暴露接口 3. @RefreshScope 4. 启动服务 5. 修改配置 6. 获取配置值 7. 刷新配置 重新获取 总结 参考:https://www.cnblogs.com/flying607/p/8459397.html 文章使用springboot版本:2.0.4.RELEASE springcloud版本Finchley.SR1 1. 依赖 需要引入下面三个依赖: compile('org.springframework.cloud:spring-clou

SpringBoot集成内存数据库Sqlite的实践

2021-09-09
目录 目标 为什么 操作步骤 工程截图 运行 效果 完整源代码 目标 在SpringBoot中集成内存数据库Sqlite. 为什么 像H2.hsqldb.derby.sqlite这样的内存数据库,小巧可爱,做小型服务端演示程序,非常好用.最大特点就是不需要你另外安装一个数据库. 操作步骤 1.修改pom.xml文件 <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</a

springboot配置多数据源的一款框架(dynamic-datasource-spring-boot-starter)

2021-09-09
前言 前篇博客介绍了用基本的方式做多数据源,可以应对一般的情况,但是遇到一些复杂的情况就需要扩展下功能了,比如:动态增减数据源.数据源分组,纯粹多库,读写分离一主多从,从其他数据库或者配置中心读取数据源等等.其实就算没有这些需求,使用此款框架实现多数据源也比之前要便捷,快速的多 框架简介 dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器 文档:https://github.com/baomidou/dyna

java中线程池最实用的创建与关闭指南

2021-09-09
目录 前言 线程池创建 只需要执行shutdown就可以优雅关闭 执行shutdownNow关闭的测试 总结 前言 在日常的开发工作当中,线程池往往承载着一个应用中最重要的业务逻辑,因此我们有必要更多地去关注线程池的执行情况,包括异常的处理和分析等. 线程池创建 避免使用Executors创建线程池,主要是避免使用其中的默认实现,那么我们可以自己直接调用ThreadPoolExecutor的构造函数来自己创建线程池.在创建的同时,给BlockQueue指定容量就可以了. private stat

SpringBoot整合mybatis-plus进阶详细教程

2021-09-09
目录 前言 wapper介绍 : 条件构造器 AbstractWrapper 一.什么是AbstractWrapper 二.QueryWrapper(LambdaQueryWrapper) 1.QueryWrapper用法示例 2.LambdaQueryWrapper用法示例 三.UpdateWrapper(LambdaUpdateWrapper) 1.UpdateWrapper用法示例 2.LambdaUpdateWrapper用法示例 mybatis-plus的插件 一.分页插件 1.配置分

Springboot项目如何获取所有的接口

2021-09-08
目录 Springboot项目获取所有接口 获取项目下所有http接口的信息 一.接口信息类 二.单元测试 Springboot项目获取所有接口 @Autowired private WebApplicationContext applicationContext; @Override public List getAllUrl() { RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMapping

java删除文件时总是返回false,删不掉的解决方案

2021-09-08
目录 java删除文件时总是返回false,删不掉 我的解决 java文件删除不了的坑,特别是压缩文件 下面列举一些情况 java.util.zip.ZipFile.close()方法关闭ZIP文件 java删除文件时总是返回false,删不掉 今天写了个简单的文件删除的程序:代码如下: public static boolean deleteFiles(File[] files){ boolean flag = false; for(File file:files){ // 路径为文件且不为空

基于java构造方法Vector查找元素源码分析

2021-09-08
目录 前言 get(int)方法分析 contains(Object)方法分析 containsAll()方法分析 indexOf(Object)方法分析 indexOf(Object,index)方法分析 lastIndexOf(Object)方法分析 elementAt(int)方法分析 firstElement()方法分析 lastElement()方法分析 elementData(int)方法分析 总结 (注意:本文基于JDK1.8) 前言 元素在存储到内存中,当我们需要使用在内存中存储