java

JAVA获取当前项目和文件所在路径的实例代码

2021-03-01
直接上代码: //当前项目下路径 File file = new File(""); String filePath = file.getCanonicalPath(); System.out.println(filePath); //当前项目下xml文件夹 File file1 = new File(""); String filePath1 = file1.getCanonicalPath()+File.separator+"xml\\";

java Thumbnails 图片处理的使用

2021-03-01
在后端开发的过程中,都逃不开与文件传输特别是图片的传输打交道,但是因为现在各种拍照设备发展越来越快,拍出的照片更是越来越清晰,但是照片文件的大小也是越来越大了,手机拍照小则2M大则30M这在网络传输过程中谁顶得住呀!所以在用户发布照片,后端对图像文件进行保存的过程中压缩图像文件是必不可少的一个过程. 而Thumbnails就是一个很好的图像处理工具,他把复杂的图像处理封装的很好,只需要短短的一行代码就能完成对图像的压缩. Thumbnails支持: 指定大小进行缩放 按照比例进行缩放 不按照比例

SpringBoot集成Flyway进行数据库版本迁移管理的步骤

2021-03-01
Flyway简介 Flyway中的迁移(migrations)模式 Flyway对数据库的所有更改都称为 migrations(迁移) . migrations(迁移) 分为版本控制(Versioned)迁移与可重复(Repeatable)的迁移两种, 而版本控制又分为regular(常规)和undo(撤销)两种形式. 版本控制迁移:具有版本号.描述和校验和,且版本是唯一的.描述用于简单记录迁移的内容,校验和用于检测意外更改. 版本控制迁移通常用于以下用途: 创建|更新|删除:表.索引.外键.枚

SpringMVC异步处理的 5 种方式示例详解

2021-03-01
前段时间研究了下 diamond 的原理,其中有个重要的知识点是长连接的实现,用到了 servlet 的异步处理.异步处理最大的好处是可以提高并发量,不阻塞当前线程.其实 Spring MVC 也支持了异步处理,本文记录下相关的技术点. 异步处理 demo 如果要启用异步返回,需要开启 @EnableAsync.如下的代码中,使用 DeferredResult 进行异步处理. 请求进来后,首先创建 DeferredResult 对象,设置超时时间为 60 秒.然后指定DeferredResult

SpringBoot使用flyway初始化数据库

2021-03-01
概述 Flyway这款数据库版本工具就算大家没有使用过但也略有耳闻了,SpringBoot对该款工具进行集成的框架可以让我们在启动SpringBoot应用时自动去找SQL版本文件进行比对执行,但在迁移或初始化时往往还是需要先手动进行下数据库的初始化配置,否则会把Unknown database的异常. 为了减少这一步所以个人就以SpringBoot的方式编码在项目的启动时自动进行数据库的初始化,然后再执行版本文件. 自动建库实现步骤 具体思路 SpringBoot的配置项都会有相应的Proper

Mybatis一对多与多对一查询处理详解

2021-03-01
要点 主要还是结果集映射(resultMap) association标签: 一个复杂类型的关联:许多结果将包装成这种类型(JavaBean)嵌套结果映射,关联可以是 resultMap 元素,或是对其它结果映射的引用 collection标签: 一个复杂类型的集合(List)嵌套结果映射,集合可以是resultMap元素,或是对其它结果映射的引用 一对多(association) 数据库结构 tid是student的外键,是teacher表的id JavaBean public class S

Java构建JDBC应用程序的实例操作

2021-03-01
我们在学习接口的时候.能够在里面做一些方法的调用.不过今天所要讲的JDBC,虽然也是连接数据库的一种接口,不过与类接口有着很大的区别,大家要注意区分.下面我们就构建JDBC的步骤进行了整理,还不会此类操作的小伙伴,一起来看看具体的内容吧. 1.加载数据库驱动. 通常使用 Class 类的 forName()静态方法来加载驱动. 例如如下代码: // 加载驱动 Class.forName(driverClass) 2.通过 DriverManager 获取数据库连接. DriverManager

spring如何解决循环依赖问题详解

2021-03-01
循环依赖其实就是循环引用,很多地方都说需要两个或则两个以上的bean互相持有对方最终形成闭环才是循环依赖,比如A依赖于B,B依赖于C,C又依赖于A.其实一个bean持有自己类型的属性也会产生循环依赖. setter singleton循环依赖 使用 SingleSetterBeanA依赖SingleSetterBeanB,SingleSetterBeanB依赖SingleSetterBeanA. @Data public class SingleSetterBeanA { @Autowired

详解 Java HashMap 实现原理

2021-03-01
HashMap 是 Java 中最常见数据结构之一,它能够在 O(1) 时间复杂度存储键值对和根据键值读取值操作.本文将分析其内部实现原理(基于 jdk1.8.0_231). 数据结构 HashMap 是基于哈希值的一种映射,所谓映射,即可以根据 key 获取到相应的 value.例如:数组是一种的映射,根据下标能够取到值.不过相对于数组,HashMap 占用的存储空间更小,复杂度却同样为 O(1). HashMap 内部定义了一排"桶",用一个叫 table 的 Node 数组表示:

java之jvm加载器例举

2021-03-01
在java的学习中,对于jvm模块我们会不断补充一些知识点,毕竟jvm是比较重要的一个组成部分.本篇围绕jvm加载器展开介绍,在加载类的时候,我们的加载器会逐个进行工作,在具体的加载器类型上,想必大家还不是很清楚.下面我们就java之jvm加载器的4中类型带来介绍. 1.Bootstrap ClassLoader (引导类加载器) 负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现的核心库,也就是JVM调用每个系统的API实现系统功能,实现跨平台的主要模块

java数组元素的引用实例讲解

2021-03-01
对于数组来说,我们想要对其中的一个元素进行引用,那就离不开new的使用.大家在学习new的时候,一般是以新建和初始化的身份出现的.如果是用在数组的引用上,那么会以运算符的方式出现.下面我们就来看看数组元素,在new运算符中引用的具体内容吧. 定义并用运算符new为之分配空间后,才可以引用数组中的每个元素,数组元素的引用方式为: (1)arrayName[index] index为数组元素下标,可以使整形常亮或整形表达式.如: a[3], b[i], c[6*i]; (2)数组元素的下标从0开始:

java二维数组指定不同长度实例方法

2021-03-01
我们知道二维数组,是在一维数组的基础上进行了维度的增加.那么在实际使用的过程中,有时候我们所需要的二维数组,它们其中的维度是不同的,这就需要我们手动的进行设置.下面我们就来一起探究,二维数组在改变维度长度大小的方法,并辅以实例进行代码展示. 1.二维数组的每个元素都是一个一维数组,这些数组不一定都是等长的.声明二维数组的时候可以只指定第一维大小,空缺出第二维大小,之后再指定不同长度的数组.但是注意,第一维大小不能空缺(不能只指定列数不指定行数). public class ArrayTest4

Gradle的基本使用

2021-03-01
一.Gradle相比Maven的优势 配置简洁 Maven是用pom.xml管理,引入一个jar包至少5行代码,Gradle只需要一行. 构建速度快 Gradle支持daemon方式运行,启动速度快,同时有基于daemon的增量构建,充分利用JVM的运行时优化,和缓存数据构建速度相比Maven快很多. 更好的灵活性.扩展性 Gradle 相对于 Maven 等构建工具, 其提供了一系列的 API 让我们有能力去修改或定制项目的构建过程. 二.基本配置 设置本地仓库地址 默认本地仓库地址是:~/.

Java Apollo是如何实现配置更新的

2021-03-01
这篇文档主要关注下配置修改后对应的 Java 对象是如何更新,并不关注整体的配置改动流程 所有代码都来自 apollo-client 项目 更新流程 在 Apollo 控制台进行配置修改并发布后,对应的 client 端拉取到更新后,会调用到 com.ctrip.framework.apollo.spring.property.AutoUpdateConfigChangeListener#onChange 方法 在调用 onChange 会收到对应的修改的配置信息 ConfigChangeEve

springcloud结合bytetcc实现数据强一致性原理解析

2021-03-01
1 使用背景和约束 公司使用的是springcloud,面临分布式事务的场景的时候,可以使用对springcloud支持比较好的byte-tcc框架,git目前2600星,使用起来也非常方便,原理也很清晰,非常适合学习. https://github.com/liuyangmin... ,结合cloud有几个重点约束如下, (1)一个业务接口,需要有三种实现类,分别是try,confirm,cancel,符合tcc的思路.实现方法必须加Transactional,且propagation必须是R

使用spring boot开发时java对象和Json对象转换的问题

2021-03-01
将java对象转换为json对象,市面上有很多第三方jar包,如下: jackson(最常用) <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind&l

spring boot使用logback日志级别打印控制操作

2021-03-01
因为公司业务需要,需要把性能日志和业务日志分开打印,用elk收集处理,所以需要对不同的业务的日志,打印到不同文件. 使用的是spring boot自带的logback. 首先在yml文件配置logback.xml文件,默认会从resources下找logback.xml文件,找不到会从yml文件中找logging.config下的指定文件. logging: level: DEBUG config: classpath:logback.xml logback.xml是logback的配置文件,可

Java中的static关键字深入理解

2021-03-01
在学习Java以来很长一段时间,我都不能理解为什么修饰一个方法的关键字各不相同,为什么有的方法可以直接调用,而有的方法需要用对象才能调用.毫不夸张的说,最近一次让我决定去整理清楚static关键字,是因为在写jdbc工具类时,其中通过静态代码块来实现加载驱动才让我对它有了新的认识. 通俗来讲,归为几点: 由static关键字修饰的方法或成员变量,不需依赖对象,就可直接访问.(通过 类名.方法名() 或 类名.属性 直接调用) static关键字不会影响到变量或方法的作用域 static关键字不允

Java基于WebMagic爬取某豆瓣电影评论的实现

2021-03-01
目的 搭建爬虫平台,爬取某豆瓣电影的评论信息. 准备 webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发.webmagic的核心非常简单,但是覆盖爬虫的整个流程,也是很好的学习爬虫开发的材料. 下载WebMagic源码,或Maven导入,或Jar包方式导入.  码云地址:https://gitee.com/flashsword20/webmagic 试运行 搭建好后打开项目, 在 us.codecraft.webmagic.processor

如何使用Reactor完成类似Flink的操作

2021-03-01
一.背景 Flink在处理流式任务的时候有很大的优势,其中windows等操作符可以很方便的完成聚合任务,但是Flink是一套独立的服务,业务流程中如果想使用需要将数据发到kafka,用Flink处理完再发到kafka,然后再做业务处理,流程很繁琐. 比如在业务代码中想要实现类似Flink的window按时间批量聚合功能,如果纯手动写代码比较繁琐,使用Flink又太重,这种场景下使用响应式编程RxJava.Reactor等的window.buffer操作符可以很方便的实现. 响应式编程框架也早已