
java
文章平均质量分 55
java
小安灬
互相交流,互相学习!
展开
-
设计模式小记
对类来说的,即一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2。原创 2023-04-03 12:11:50 · 393 阅读 · 0 评论 -
spring定时任务改为并行执行多个任务
【代码】spring定时任务改为并行执行多个任务。原创 2023-02-22 12:03:16 · 751 阅读 · 0 评论 -
MDC 实现全链路调用日志跟踪
*** 线程池配置/*** 默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,* 当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;* 当队列满了,就继续创建线程,当线程数量大于等于maxPoolSize后,开始使用拒绝策略拒绝*/ // 核心线程数(默认线程数) @Value("${thread.corePoolSize:0}") private int corePoolSize;原创 2023-01-03 17:10:56 · 619 阅读 · 0 评论 -
mybatis拦截器实现填充创建人、修改人
mybatis拦截器实现填充创建人、修改人原创 2022-08-10 18:48:04 · 1359 阅读 · 0 评论 -
SpringCloudAlibaba和SpringCloud的区别
SpringCloudAlibaba和SpringCloud的区别名称SpringCloudSpringCloudAlibaba注册中心Eureka、ConsulNacos分布式配置中心SpringCloud ConfigNacos服务总线BusNacos网 关Zuul、Zuul2Gateway负载均衡RibbonLoadbalancer熔断降级HystrixSentinel服务调用FeignOpenFeign分布原创 2022-05-07 17:56:35 · 346 阅读 · 0 评论 -
spring-retry,实现重试
在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。pom<dependency> <groupId>org.springframe原创 2022-04-19 10:51:47 · 467 阅读 · 0 评论 -
spring-boot-starter-actuator
pom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>ActuatorApplicationpackage com.example.actuator;import org.springframewo..原创 2021-06-04 10:59:16 · 3918 阅读 · 0 评论 -
springboot[1]-多模块共用配置文件
子模块1配置信息如下redis.propertiesmysql.propertieskafka.properties私有配置参数.properties子模块2配置信息如下redis.propertiesmysql.propertieskafka.properties私有配置参数.properties问题描述中间件配置信息大体一致,但子模块1、2均需配置,存在冗余配置可能存在子模块1、2配置信息不一致,导致错误,如 : 数据库连接信息、redis库信息实际业务也.原创 2021-05-25 14:39:08 · 4402 阅读 · 1 评论 -
动态代理-jdk、cglib、javassist
代理静态代理 (不做说明)动态代理动态代理jdkcglibjavassist项目截图spring源码环境搭建jdk代码如下 :JdkClient.java : 代理测试类JdkUserProxy.java : 代理实现类UserService.java : 测试-接口类UserServiceImpl.java : 测试-实现类JdkClientpackage com.proxy.jdk;import java.lang.reflect..原创 2021-05-19 11:02:36 · 364 阅读 · 1 评论 -
springmvc[1]-HandlerInterceptor、ResponseBodyAdvice
拦截器执行顺序HandlerInterceptor.preHadnleTestController.testResponseBodyAdvice.supportsResponseBodyAdvice.beforeBodyWriteHandlerInterceptor.postHandleHandlerInterceptor.afterCompletion代码如下 :TestController.java : 测试controllerAppMvcConfig.java : 配.原创 2021-05-18 14:25:31 · 552 阅读 · 0 评论 -
springboot-rocketmq日志rocketmq_client.log问题
问题描述springboot配置rocketmq后,会写入日志到rocketmqlogs目录洗阿德rocketmq_client.log文件中,且日志过于庞大。解决1. 启动类增加代码System.setProperty(ClientLogger.CLIENT_LOG_USESLF4J,"true");2. LogBack.xml中增加配置<!-- ROCKETMQ START --><appender name="RocketmqClientAppender" c原创 2021-05-14 11:21:09 · 6127 阅读 · 1 评论 -
spring[7]-使用ImportBeanDefinitionRegistrar、JDK代理、FactoryBean模拟mybatis原理
简介使用ImportBeanDefinitionRegistrar、JDK代理、FactoryBean模拟mybatis原理知识点ImportBeanDefinitionRegistrarJDK代理FactoryBean@interfacemybatis的极简单的知识代码如下 :UserDao.java : 使用mybatis的mapperProxyTest.java : 测试类MyImportBeanDefinition.java : 使用 ImportBea.原创 2021-05-13 19:21:02 · 267 阅读 · 1 评论 -
spring[6]-SmartInitializingSingleton, InitializingBean, DisposableBean, BeanNameAware
package com.service;import org.springframework.beans.factory.BeanNameAware;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.SmartInitializingSing原创 2021-05-13 15:45:56 · 277 阅读 · 0 评论 -
spring[5]-FactoryBean
FactoryBeanLearn/** * FactoryBean接口的实现类 * 可以使用FactoryBean注册一个bean,并可实现自定义类的创建过程 */@Componentpublic class FactoryBeanLearn implements FactoryBean { /** * 返回的对象实例 */ @Override public Object getObject() throws Exception { //.原创 2021-05-13 15:44:09 · 127 阅读 · 0 评论 -
spring[4]-BeanPostProcessor
package com.BeanFactoryPostProcessor;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;import org.springframework.stereotype.Component;/** * ===Spring IOC容器实例化Bean=== * ===调用BeanPostPr原创 2021-05-13 15:24:45 · 112 阅读 · 0 评论 -
spring[3]-BeanFactoryPostProcessor
import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanFactoryPostProcessor;import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;import org.springframework.beans.factory.support.Gen原创 2021-05-13 15:21:13 · 103 阅读 · 0 评论 -
spring[2]-ApplicationContextAware
通过ApplicationContextAware,Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中setApplicationContext方法,可以通过这个上下文环境对象得到Spring容器中的Bean。静态方法使用springbean无法通过@Autowried注入线程内无法使用springbean此时,可以通过ApplicationContextAware来实现SpringContextHolder.javapackage com..原创 2021-05-13 15:17:46 · 248 阅读 · 0 评论 -
spring[1]-使用ImportBeanDefinitionRegistrar自定义注册bean(基于源码)
简介 :ImportBeanDefinitionRegistrar类只能通过其他类@Import的方式来加载,通常是启动类或配置类。使用@Import,如果括号中的类是ImportBeanDefinitionRegistrar的实现类,则会调用接口方法,将其中要注册的类注册成bean。实现该接口的类拥有注册bean的能力。扩展 : 将类交给spring管理方式 :@Componet@Service等扩展 : 将对象交给spring管理方式:@Bean@Beanpublic.原创 2021-05-13 15:05:15 · 1000 阅读 · 3 评论 -
自定义springboot-starter
Spring Boot 最强大的功能就是把我们常用的场景抽取成了一个个Starter(场景启动器),我们通过引入Spring Boot为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能。即使是这样,SpringBoot也不能囊括我们所有的使用场景,往往我们需要自定义Starter,来简化我们对Spring Boot的使用。项目截图项目搭建流程1. 新建maven项目custome-starter新建项目,不做说明,自己新建即可groupId : com.custome.st.原创 2021-05-08 11:20:50 · 174 阅读 · 1 评论 -
G1GC参数说明
G1 GC是启发式算法,会动态调整年轻代的空间大小。目标也就是为了达到接近预期的暂停时间。G1提供了两种GC模式,YoungGC和Mixed GC,两种都是Stop The World(STW)的。Young GCYoungGC主要是对Eden区进行GC,它在Eden空间耗尽时会被触发。在这种情况下,Eden空间的数据移动到Survivor空间中,如果Survivor空间不够,Eden空间的部分数据会直接晋升到老年代空间。Survivor区的数据移动到新的Survivor区中,也有部分数据晋.原创 2021-05-07 11:20:38 · 4808 阅读 · 0 评论 -
自定义classloader并实现热部署-使用findClass
需求可在前端新增、修改java代码,并可实现服务不重启的前提下进行代码的部署运行。相当于:可实现java代码的热部署。代码如下MyClassLoaderTest:测试类MyCompiler:编译类,可将java代码编译为字节码byte数组MyClassLoaderHelp:自定义classloader封装类MyClassLoader:自定义classloader(不要直接使用此类中的方法,应通过使用MyClassLoaderHelp来实现功能)MyClassLoaderTe.原创 2021-04-25 15:59:02 · 612 阅读 · 1 评论 -
java实现通过xml或者json,生成数据库树状结构数据记录
java实现传入json数据,生成树状结构数据记录原数据生成数据代码实现Node.javaimport lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;@Data@AllArgsConstructor@NoArgsConstructorpublic class Node implements Serial原创 2021-01-12 19:23:09 · 849 阅读 · 0 评论 -
java集成groovy
java集成groovy,实现页面化可编写脚本并执行groovy教程https://www.w3cschool.cn/groovyGroovyExtendScript - 自定义扩展函数类import groovy.lang.Script;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * groo原创 2020-11-03 14:03:52 · 657 阅读 · 0 评论 -
rocketmq配置
### 以下仅做参考...# NameServer地址,分号分割namesrvAddr=# Broker集群名称brokerClusterName=#Broker服务器名称morning服务器hostname,此处不同的集群配置文件填写的不一样brokerName=# brokerID 0表示主节点 大于0表示从节点brokerId=# broker角色,分为 ASYNC_MASTER(异步复制Master:默认) SYNC_MASTER(同步双写Master) SLAVE(从节点)b原创 2020-09-23 18:25:35 · 479 阅读 · 0 评论 -
springboot整合mybatis使用druid连接池无法打印sql日志
1. properties*********注意#mybatis(若druid自定义SqlSessionFactory 则此配置会失效,解决方案在DuridDataSourceFactory将会说明)#mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl# 最大建立连接等待时间。druid.maxWait=60000# Destroy线程会检测连接的间隔时间,检测需要关闭的空闲连接testWhil原创 2020-09-02 09:43:30 · 4422 阅读 · 0 评论 -
springboot整合mybatis-starter
pom.xml增加<!-- 数据库 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency> <groupId>org.mybatis.spring.boot&原创 2020-08-26 15:13:00 · 353 阅读 · 0 评论 -
学习资料
JVM黑马 : https://www.bilibili.com/video/BV1b5411t7xp马士兵 : https://www.bilibili.com/video/BV16Z4y1s7u4深入理解java虚拟机 : https://www.bilibili.com/video/BV1BW411R7QK多线程与高并发https://www.bilibili.com/video/BV1wi4y147fV马士兵 : https://www.bilibili.com/video/BV1原创 2021-02-01 10:36:50 · 657 阅读 · 0 评论 -
springboot实现读取外部配置文件
需求jar包中application-dev.properties有参数config.bizNotifyUrl=http://112.74.244.107:8330/api/notify客户想外部存在个配置文件可修改config.bizNotifyUrl的值,但是不想重写别的如果客户配置了则使用客户的,如果未配置则使用程序中默认的1. 在jar包同级目录创建config文件夹2. 在config文件夹下建立扩展配置文件-spring.profiles.active=dev (环境),原创 2020-08-03 10:34:33 · 1333 阅读 · 0 评论 -
jvisualvm-安装插件
选择对应版本 :https://visualvm.github.io/pluginscenters.html下载插件安装插件使用插件原创 2020-07-17 11:48:16 · 793 阅读 · 0 评论 -
idea-hexview、jclasslib插件安装、使用
jclasslib插件安装jclasslib插件使用原创 2020-07-16 17:29:16 · 2845 阅读 · 0 评论 -
java-jar 参数
-Xmx : 指定堆的最大大小-Xms : 设置堆的最小和初始大小-XX:+UseG1GC : 使用G1收集器-XX:MaxMetaspaceSize : 设置可以分配给类元数据的最大本机内存-XX:MaxGCPauseMillis : 设置最大GC暂停时间的目标(以毫秒为单位)-XX:+ParallelRefProcEnabled : 启用并行参考处理-XX:ErrorFile : 指定发生不可恢复的错误时将错误数据写入的路径和文件名-Xloggc : 设置应将详细的GC事件信息重定向到该.原创 2020-07-17 12:02:00 · 1603 阅读 · 0 评论 -
idea配置spring源码
1. 安装gradle1.1 解压gradle解压gradle安装包 (gradle-6.5-bin.zip)1.2 配置环境变量GRADLE_HOME : D:\Program Files\gradle-6.5(gradle路径)Path : %GRADLE_HOME%\binGRADLE_USER_HOME : D:\apache-maven-3.2.3\repository(仓库路径)1.3 验证是否安装成功 (win10貌似需要重启,环境变量才生效)gradle -vers原创 2020-06-27 19:26:04 · 994 阅读 · 1 评论 -
java - 使用Semaphore控制方法并发访问
实现效果为 : 某个方法调用并发限制在2个,并发超出则等待public class SemaphoreTest { public static void main(String[] args) { // 模拟10个并发 for (int i = 0; i < 10; i++) { int finalI = i; new Thread(new Runnable() { @Sne.原创 2020-06-11 12:02:40 · 241 阅读 · 0 评论 -
springboot整合redis(单机、主从哨兵、集群)
1、配置1.1、配置图解1.2、源码包源码包下载2、验证2.1、程序启动2.2、测试2.3、stop-master2.4、stop-master-again2.5、数据同步3、其它事项3.1、down-after-milliseconds#master或slave多长时间(默认30秒)不能使用后标记为s_down状态。 sentinel down-after-milliseconds mymaster 3000 (可改为3秒)redis哨兵sentinel.config中配置,原创 2020-05-18 16:32:00 · 1599 阅读 · 0 评论 -
idea初始化的一些简单配置
1> 设置快捷键 (依据个人爱好)file -> setting -> keymap -> 下拉选择Eclipse2> 配置gitfile -> setting -> Version Control -> Git -> 选择git.exe3> 配置jdkhttps://blog.youkuaiyun.com/qq_28289405...原创 2020-04-26 15:05:01 · 411 阅读 · 0 评论 -
java-数据字典转换
Dict 字典注解类import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.FIEL...原创 2020-04-19 16:36:34 · 4967 阅读 · 0 评论 -
JAXB解析xml到实体类
xml : 简单案例<Document> <PRH> <PA01> <PA01A> <PA01AI01>2019112716295473566552</PA01AI01> <PA01AR01>201...原创 2020-04-19 16:27:21 · 506 阅读 · 0 评论 -
spring-aop-切面+注解实现日志记录
注解实现类 : InterfaceLogAspect :import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.fintell.dp3.api.async.AsyncTask;import lombok.extern.slf4j.Slf4j;@Aspect@Compone...原创 2020-04-19 16:17:50 · 375 阅读 · 0 评论 -
java-线程池线程数计算
使用多线程就是在正确的场景下通过设置正确个数的线程来最大化程序的运行速度将这句话翻译到硬件级别就是要充分的利用 CPU 和 I/O 的利用率场景 + 线程个数 = 运行速度场景分为 :CPU 密集型程序I/O 密集型程序CPU 密集型程序一个完整请求,I/O操作可以在很短时间内完成, CPU还有很多运算要处理,也就是说 CPU 计算的比例占很大一部分假如我们要计算 1...翻译 2020-04-19 13:32:31 · 2513 阅读 · 1 评论 -
dubbo-springboot注解配置多协议(rest、dubbo)
本案例只做简单配置, 复杂配置按业务需求进行配置即可1> 配置pom.xml添加依赖2> 配置application.properties3> 增加协议配置4> dubbo服务使用pom.xml添加依赖 :<!--dubbo-springBoot依赖 --> <dependency> <groupId>com.al...原创 2020-04-17 10:25:25 · 1980 阅读 · 0 评论