![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 61
evasnowind
关注java,分布式开发,微服务
展开
-
源码分析之JDBC实现原理与SPI机制
JDBC实现原理与SPI机制JDBC实现原理分析JDBC常见的代码一般是这么写:String url = "jdbc:mysql:///consult?serverTimezone=UTC";String user = "root";String password = "root";Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(url, user, pass原创 2021-01-22 15:47:59 · 320 阅读 · 0 评论 -
编译时报java.lang.NoClassDefFoundError: org/w3c/dom/ls/DocumentLS
我在编译soul源码时遇到这问题,错误很明显,缺少某一个类DocumentLS,但其实是JDK版本问题,选用JDK 8即可。比如我用的IDEA,打开Project Structure,需要留意下图中的两个地方,都改成JDK 8才可以。...原创 2021-01-19 19:46:16 · 2472 阅读 · 0 评论 -
spring 自定义注解时使用AliasFor注解别名时 默认值无法被覆盖
事情是这样子的:我想自定义一个缓存注解,用来缓存方法返回值,并且支持自定义缓存超时时间,注解定义是这样:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)@Inheritedpublic @interface MyCache { @AliasFor("value") int expireTime() default 60; @AliasFor("expireTime") int value原创 2020-11-20 18:19:53 · 3652 阅读 · 0 评论 -
源码分析之Java线程池ThreadPoolExecutor
文章目录0. 源码注释中的关键点1. 常用变量的解释2. 构造方法3. 提交执行task的过程4. addworker源码解析5. 线程池worker任务单元6. 核心线程执行逻辑-runworker参考资料我个人觉得,学习源码的姿势,首先是需要知道想学习的框架/工具如何使用,然后接下来再去看源码注释,看看当时代码作者是如何阐述代码的,再去看代码怎么编写,效果才最佳。同样的,接下来要分析的线程池,首先用途自不必说,不管有没有用过,ThreadPoolExecutor的运行机制、传说中的7个参数(核心线程原创 2020-09-21 20:48:11 · 96 阅读 · 0 评论 -
Guava RateLimiter 源码分析
Guava RateLimiter基本使用学东西时我们应该尽量去看官网、看源码、看官方给出的单元测试。比如Guava RateLimiter,从RateLimiter类的源码注释中可以看到,官方给出的典型应用场景与使用:As an example, imagine that we have a list of tasks to execute, but we don't want to submit more than 2 per second: final RateLimiter rateLi原创 2020-09-02 16:31:08 · 135 阅读 · 0 评论 -
tomcat和dubbo对于JDK线程池的修改
文章目录预备知识概述Tomcat线程池源码分析ThreadPoolExecutorTaskQueueDubbo线程池源码分析参考资料预备知识计算任务的分类CPU密集型:需要线程长时间进行的复杂的运算,这种类型的任务需要少创建线程,过多的线程将会频繁引起上文切换,降低任务处理处理速度。IO密集型:由于线程并不是一直在运行,可能大部分时间在等待 IO 读取/写入数据,增加线程数量可以提高并发度,尽可能多处理任务。JDK线程池,java.util.concurrent.ThreadPoolE原创 2020-08-18 16:16:32 · 480 阅读 · 0 评论 -
第三方库shiro-redis所引起的内存泄露问题分析
现象线上某系统运行不到一周,响应速度变慢,并且多次重启,排查时发现CPU占用到100%,但这段时间系统并发量并未改变,数据库、缓存等也没发现异常。排查过程1、top指令查看哪个进程占用CPU高发现确实是该系统的java进程。2、使用 top -Hp 进程id 看哪个线程,然后利用jstack命令查看对应线程一直在干什么很经典的排查线上CPU 100%问题的操作步骤,注意要转十六进制 .最终发现是GC操作占用CPU。3、此处怀疑是某处有内存泄露,使用jmap -histo:live 进程i原创 2020-07-29 16:18:23 · 1584 阅读 · 0 评论 -
Error: Could not find or load main class ***
双亲委托模型类加载器的双亲委派模型在JDK 1.2时期被引入,并被广泛应用于此后几乎所有的Java程序中,但它并不是一个具有强制性约束力的模型,而是Java设计者们推荐给开发者的一种类加载器实现的最佳 实践。优点Java中的类随着它的类 加载器一起具备了一种带有优先级的层次关系。例如: java.lang.Object,java.lang.String 在程序的各种类加载器环境中都能够保证是同一个类,保证安全若加载了别人写的java.lang.String,别人想干啥干啥源码分析原创 2020-07-11 15:06:58 · 200 阅读 · 0 评论 -
JDK各个版本特性速览
JDK 1.5很重要的一个版本。更新了Java内存模型(JMM)增强volatile语义增强final语义泛型For-Each循环注解枚举JUC包lock接口JDK 1.6Desktop类和SystemTray类JAXB2实现对象与XML之间的映射StAXCompiler API轻量级 Http Server API插入式注解处理API(Pluggable Annotation Processing API)用Console开发控制台程序对脚本语言的支持(如原创 2020-06-18 15:33:55 · 242 阅读 · 0 评论 -
spring项目部署linux时读取字体失败导致绘图时输出乱码
现象spring项目部署linux时读取字体失败导致绘图时输出乱码,比如说调用Graphics2D graphic绘图时用到字体,却输出乱码。原因字体文件找不到,比如说开发环境是windows,可能是使用“微软雅黑”字体,是正常的,但部署到线上(往往是linux),就会是乱码。解决1、找到项目所需字体,上传到linux服务器中,并放到指定位置先说结论:我个人不推荐这样做!!!比如说这...原创 2020-04-27 23:41:36 · 825 阅读 · 2 评论 -
spring-boot以jar包方式时读取resource或是template文件
现象以jar包方式部署系统,想读取resource或是template下面的文件时,报 File Not Found我遇到的情况是,整个项目达成了一个包,在开发环境(windows + idea)读取文件没问题,但在预发布环境(centos, 打成一个jar部署),则报错。使用jar -xvf xxx.jar命令解压jar后,大体结构如下:BOOT-INFMETA-INForg...原创 2020-04-26 23:22:50 · 2866 阅读 · 0 评论 -
spring中使用mybatis plus连接sqlserver
本文主要关注如何使用mybatis/mybatis plus连接SQL Server数据库,因此将省略其他项目配置、代码。框架选择应用框架:spring bootORM框架:mybatis plus(对于连接数据库而言,mybatis和mybatis plus其实都一样)数据库连接池:druidpom依赖此处仅给出我的配置,mybatis/druid请依据自己项目的需要进行选择。方便...原创 2020-03-03 10:03:39 · 6833 阅读 · 3 评论 -
Mybatis-Plus select不列出全部字段,只查询部分字段
mybatis-plus select查询语句默认是查全部字段,有两种方法可以指定要查询的字段假定表结构如下:CREATE TABLE `user` ( `id` bigint(20) NOT NULL COMMENT '主键', `name` varchar(30) DEFAULT NULL COMMENT '姓名', `age` int(11) DEFAULT NULL COM...原创 2020-02-01 11:27:57 · 26200 阅读 · 12 评论 -
mybatis plus常见用法-不用xml实现自定义查询
找到两种方法:1、采用mybatis注解的方式参见:MyBatis Plus 自定义查询语句DAO层:@Select("select b.bomName, " + "b.bomProductType, b.bomMaterial, " + "o.customerID AS bomID, " + "o.ordersDataNo AS qrCode, " + "s.delive...原创 2020-02-01 11:27:13 · 7322 阅读 · 1 评论 -
Java中日期格式化yyyyMMdd和YYYYMMdd的区别
Java中日期格式化yyyyMMdd和YYYYMMdd的区别示例代码: public static void main(String[] args) { //YYYY 是表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。 //2019-12-29至2020-1-4跨年周 Calendar calendar...原创 2020-01-16 14:43:40 · 16037 阅读 · 0 评论 -
mybatis/mybatis plus的实体类字段名称与数据库字段匹配失败的解决办法
问题数据库表字段名称类似这样然而根据SQL逆向生成的实体类,变量名只可能是这样:注:此处使用工具http://java.bejson.com/generator/生成的实体类。实际运行时会发现,实体类与数据库表字段绑定失败、匹配不到字段,原因在于mybatis/mybatis plus匹配变量时按照ext_attr4去找,而数据库中则是ext_attr_4。解决由于我遇到的情况,...原创 2019-12-18 10:03:39 · 6704 阅读 · 1 评论 -
Java中如何判断文件类型
目前看到的有两种方式:根据文件后缀根据文件魔数根据文件后缀满足一般需要,但如果文件后缀被手工修改,则可能判断错误。JDK中已经提供了现成的接口用于根据文件名判断:URLConnection.guessContentTypeFromName("xxx.com/api/yyy.jpg")根据文件魔数魔数概念就不在此赘述,此种方式会通过读取文件二进制字节流的方式,获取文件开头的几个...原创 2019-12-09 09:57:56 · 1908 阅读 · 0 评论 -
java根据URL获取输入流以及下载文件
代码取自:JAVA根据URL网址获取输入流/** * 根据地址获得数据的输入流 * @param strUrl 网络连接地址 * @return url的输入流 */ public static InputStream getInputStreamByUrl(String strUrl){ HttpURLConnection conn = null; ...原创 2019-12-05 10:15:19 · 9052 阅读 · 0 评论 -
idea中调整阿里巴巴java编码规约插件(p3c)的提醒颜色
阿里巴巴java编码规约插件调整提醒颜色idea的默认主题以白色为主,导致阿里插件(p3c)的部分提醒很不醒目。到p3c项目下询问后,得到如下答复:参见https://github.com/alibaba/p3c/issues/610尝试后果然提示效果好很多,参加下图。调整前后的对比效果:...原创 2019-11-23 17:56:41 · 611 阅读 · 0 评论 -
spring boot 多个包启动失败-添加多个包扫描
spring boot 多个包启动失败-添加多个包扫描表现:启动时提示如下信息:因为项目需要,将代码结构调整为:com.xxxxxyyXxxxApplication这种组织结构,注意,此处时同一个项目(没有拆分成多个maven模块),有多个包保存不同功能模块的代码。此时启动项目,报错如下:Error starting ApplicationContext. To disp...原创 2019-11-12 19:39:20 · 379 阅读 · 0 评论 -
分布式id生成-雪花算法实现资源汇总
讲分布式Id生成的文章很多,其中雪花算法也提到过多次,本文不再赘述,只是给出资源汇总,仅供参考。snowflake-snowflake-2010twitter原版,scala编写,地址:https://github.com/twitter-archive/snowflakejava版本snowflake代码源地址 参见https://github.com/beyondfengyu/Sn...原创 2019-10-22 18:10:31 · 171 阅读 · 0 评论 -
elasticsearch启动时报错:error=’Cannot allocate memory’ (errno=12)
elasticsearch启动时报错:Java HotSpot™ 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e5330000, 449642496, 0) failed; error=‘Cannot allocate memory’ (errno=12)There is insufficient memory for...原创 2019-10-22 14:47:15 · 942 阅读 · 0 评论 -
mybatis xml常用写法-传入数组list
需求:xml中传入参数中包含一个list,需要在where中拼接in语句假设查询person表,参数类型为XXXVo,XXXVo中包含一个List对象,保存了状态列表,此时可以参考如下查询<select id="queryXXX" parameterType="XXXVo" resultMap="XXXResult"> select * from person ...原创 2019-10-19 11:22:37 · 5426 阅读 · 1 评论 -
极客时间-java并发编程实战听课笔记(2) 可见性、原子性和有序性问题:并发编程Bug的源头
java并发编程实战听课笔记(2) 可见性、原子性和有序性问题:并发编程Bug的源头为何会出现并发问题根源为了加速程序执行速度、提高资源利用率,有了各种技术,而这些技术也带来了不同的副作用:CPU有缓存,缓存导致可见性问题操作系统有进程、线程,分时复用CPU,线程切换带来了原子性问题编译优化,带来有序性问题CPU缓存带来的可见性问题如果是单核CPU时代,CPU有缓存,没什么影响...原创 2019-09-27 09:24:44 · 545 阅读 · 1 评论 -
【听课笔记】java分布式锁
课程链接课程:https://url.163.com/VD8java锁synchronized在jdk 1.5以后,优化了,使其性能并不是像很多帖子说的那样,“非常重”JUC lock方法说明lock()获取锁,如果锁被暂用则一直等待tryLock()如果获取锁的时候锁被占用就返回false,否则返回truetryLock(long time, Ti...原创 2019-09-18 17:01:37 · 69 阅读 · 0 评论 -
google guava使用教程系列(1)-String相关
注意:本文档基于google guava 28 wikiJoiner连接器将字符串拼接Joiner joiner = Joiner.on("; ").skipNulls();return joiner.join("Harry", null, "Ron", "Hermione");返回Harry; Ron; HermioneskipNulls()方法是直接忽略null,使用useFo...翻译 2019-09-14 16:10:05 · 186 阅读 · 0 评论