![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 60
java
qgbihc
这个作者很懒,什么都没留下…
展开
-
阿里Seata的分布式事务实现
一、Seata的事务模式Seata提供了四种不同业务场景下的事务模式:AT模式: 一阶段执行各分支事务、二阶段提交和回滚,均由 Seata 框架自动完成。AT 模式是一种对业务无任何侵入的分布式事务解决方案。TTC模式: 相对于AT 模式,TCC 模式对业务代码有侵入性,但是 TCC 模式无 AT 模式的全局锁,TCC 性能会比 AT模式高很多。适用于核心系统等对性能有很高要求的场景。SAGA模式:Sage 是长事务解决方案,事务驱动,使用那种存在流程审核的业务场景,如: 金融行业,需要层层审核。原创 2021-03-24 14:49:05 · 422 阅读 · 0 评论 -
分布式事务
一、分布式事务场景1、跨库事务跨库事务指的是,一个应用某个功能需要操作多个库,不同的库中存储不同的业务数据。比如一个服务同时操作2个库的情况。2、分库分表通常一个库数据量比较大或者预期未来的数据量比较大,都会进行水平拆分,也就是分库分表。3、服务化(SOA)微服务架构是目前一个比较一个比较火的概念。例如应用操作了多个数据库,应用业务逻辑复杂,应该拆分成不同的独立服务,以简化业务逻辑。拆分后,独立服务之间通过RPC框架来进行远程调用,实现彼此的通信。二、分布式事务模型1、XA 分布式事务1原创 2021-03-23 15:56:32 · 182 阅读 · 0 评论 -
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 找不到
分布式事务报错:The class “com.mysql.jdbc.jdbc2.optional.MysqlXADataSource” specified by property “xaDataSourceClassName” could not be found in the classpathmysql 6以上要用新的类: com.mysql.cj.jdbc.MysqlXADataSource现在很多教程都用的mysql 5.x版本,在mysql配置上面有很多都和现在的8.x不一样,比如这个atom原创 2021-03-23 14:50:42 · 2404 阅读 · 0 评论 -
SpringBoot中静态资源配置
SpringBoot的Web项目,会有很多静态资源。那么spring是如何加载静态资源的呢?I、 默认配置静态资源路径,SpringBoot默认从属性spring.web.resources.static-locations中取得。对应的配置类为spring-boot-autoconfigure.jar的org.springframework.boot.autoconfigure.web.WebProperties,在spring boot 2.4.0以前定义在org.springframework.原创 2021-03-19 13:30:11 · 527 阅读 · 0 评论 -
Maven的parent pom的依赖
Maven 是一个Java语言编写的开源项目管理工具,是Apache软件基金会的顶级项目。主要用于项目构建,依赖管理,项目信息管理。一、下载配置官网下载地址:http://maven.apache.org/download.cgi解压下载的压缩包配置环境变量(需要先配置好%JAVA_HOME%环境变量):settings.xml,实际项目开发中,Maven的大多数配置都是在该文件中进行设置。%MAVEN_HOME%/conf目录下的settings.xml,该配置文件针对系统所有用户。系统当原创 2021-03-17 16:01:57 · 1480 阅读 · 0 评论 -
java匿名类 - new接口
接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。接口并不是类,只描述对象的属性和方法,无法实例化,但是确实有new的情况。例如:public class Test { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() {原创 2021-02-03 17:28:58 · 296 阅读 · 0 评论 -
BlockingQueue的核心方法
BlockingQueue的核心方法:数据入队:void put(E e) :把Object加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断,直到BlockingQueue里面有空间再继续。boolean add(E e):把Object加到BlockingQueue里,如果BlockQueue没有空间,则抛出异常IllegalStateException: Queue full。boolean offer(E e):如果可能的话,将Object加到Bl原创 2021-02-03 08:30:39 · 136 阅读 · 0 评论 -
ExecutorService中submit和execute、Runnable和Callable
ExecutorService中submit和execute、Runnable和Callable1、创建ExecutorService通过工具类java.util.concurrent.Executors的静态方法来创建。Executors包中有 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。比如,创建一个ExecutorService的实例,ExecutorService实际原创 2021-02-02 14:59:05 · 1303 阅读 · 1 评论 -
@FunctionalInterface
1、理解函数式接口JDK 1.8 API包含了很多内建的函数式接口,在老Java中常用到的比如Comparator、Runnable、Callable接口,都增加了@FunctionalInterface注解,以便能用在lambda上。@FunctionalInterfacepublic interface Runnable { /** * When an object implementing interface <code>Runnable</code>原创 2021-02-02 10:41:57 · 642 阅读 · 1 评论 -
JasperReport 导出PDF不能加载
JasperReport 导出PDF不能加载。项目JasperReport模板导出PDF,最近在浏览器不能打开了。提示【未能加载PDF文档】,但不是JasperReport导出的PDF却正常。一、调查:1、调查发现,通过代码生成的PDF版本为1.4而能正常显示的PDF版本为1.7。2、新问题:发现直接打开pdf文件能显示,但是使用项目中还是有问题。项目中加载PDF是通过controller读取文件后,用ResponseEntity返回,修改为reponse直接返回。二、对策:1、代码中生原创 2020-11-20 12:52:32 · 1021 阅读 · 1 评论 -
GDAL建立GeoTIFF金字塔文件
gdal中的工具gdaladdo.exe,可以为大多数支持的格式建立或者重建(内)金字塔,可以使用几种重采样算法来进行重采样操作。一、gdaladdo使用说明用法:gdaladdo [-r {nearest,average,gauss,cubic,cubicspline,lanczos,average_mp,average_magphase,mode}] [-ro] [-clean] [-q] [-oo NAME=VALUE]* [-minsize val]原创 2020-10-27 21:27:45 · 2452 阅读 · 0 评论 -
SWIG 转换C++接口为Java接口
一、SWIGSimplified Wrapper and Interface Generator (SWIG) 是一个开源的,C或C++编写的软件与其它各种高级编程语言进行嵌入包装的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本编译语言,例如C#, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Modula-3, OCAML以及原创 2020-10-23 00:43:56 · 1563 阅读 · 0 评论 -
GDAL矢量图层裁剪为矢量网格(java)
1、矢量图层打开矢量图层,并显示基本信息。图层数,驱动名,图层网格范围,属性表结构信息,矢量元素,及矢量元素的属性public static void info(String srcFile) { // 读取原图 DataSource srcDataSource = ogr.Open(srcFile, 0); if (srcDataSource == null) { System.err.println("GDALOpen failed - " + gd原创 2020-09-28 18:35:43 · 886 阅读 · 1 评论 -
GDAL查看DEM高程数据(java)
DEM基本数据Tif文件的读取。显示坐标原点,无数据值,高程最大值,高程最小值释放文件句柄资源。代码如下import org.gdal.gdal.Band;import org.gdal.gdal.Dataset;import org.gdal.gdal.Driver;import org.gdal.gdal.gdal;import org.gdal.gdalconst.gdalconstConstants;public class GDALDemData {原创 2020-09-26 14:50:08 · 2678 阅读 · 0 评论 -
GDAL根据Shape文件切图(java)
目地用Java实现类似QGIS中【按掩膜图层裁剪栅格】的功能。其实QGIS本身调用的就是gdalwarp.exe。官方文档:https://gdal.org/programs/gdalwarp.html#gdalwarpgdalwarp [--help-general] [--formats] [-s_srs srs_def] [-t_srs srs_def] [-ct string] [-to "NAME=VALUE"]* [-novshiftgrid] [-order n | -原创 2020-09-26 14:32:52 · 1427 阅读 · 2 评论 -
GeoTiff及GDAL切图(java)
一、GeoTiffGeoTiff是很常见的一种遥感影像数据格式,它是一种栅格数据,这种数据是以像素点矩阵的形式存储的。TIF文件中的空间信息包括投影信息和仿射变换信息。其中,仿射变换(经纬度等)的信息分别为:左上角的坐标(经度和维度)、东西和南北方向的像素分辨率(也就是每个像素点的经纬度偏移量)以及图像的旋转系数(正北方向时为零)。这样,每个像素点的坐标就可以通过它与左上角的偏移量和每个像素的分辨率值计算出来。切图产生的新图的投影信息是不变的,但仿射信息会发生变化,因为左上角的原点可能跟原图不一样了。原创 2020-09-25 15:48:39 · 4808 阅读 · 0 评论 -
Address already in use: bind 端口被占用的解决办法
经常出出现Address already in use: bind 端口被占用的现象1.启动cmd, 执行命令netstat -ano|findstr 8080 ,会查询出占用端口号的进程号比如找到被占用端口8080的PID是41962、输入tasklist|findstr “4196”,回车,查看是哪个进程或者程序占用了8080端口,结果是:javaw.exe3、打开任务管理器关闭进程就可以了,但是有时候会遇到这样的问题,同名进程太多不知道是哪个?4、打开任务管理器的查看->选择列,√P原创 2020-08-26 15:18:48 · 1911 阅读 · 0 评论 -
理解Java - JDK动态代理原理
JDK动态代理JDK的动态代理是 动态的根据指定的接口生成一个类的字节码,该类实现接口的方法。通过自己实现模拟代理,以便于容易理解动态代理的原理。接口及实现类实际使用时,一般有实现类的话,作用就是功能增强。如果没有实现类,就会根据业务规则,做共通的处理。为了测试方便,暂时使用实现类。public interface TestInterface { void hello();}...原创 2020-04-17 15:26:44 · 111 阅读 · 0 评论 -
Spring - 基于JPA的动态SQL执行器
JPA动态SQL执行通过JPA的EntityManager 实现SQL的执行。public class DaoProxySupport { private EntityManager em; public DaoProxySupport(EntityManager em) { this.em = em; } public <T> List<T> se...原创 2020-04-17 12:04:02 · 719 阅读 · 0 评论 -
Spring - DI循环依赖
Spring中循环依赖的3种情况构造器循环依赖构造器的循环依赖是不可以解决的,spring容器将每一个正在创建的bean标识符放在一个当前创建bean池中,在创建的过程一直在里面,如果在创建的过程中发现已经存在这个池里面了,这时就会抛出异常表示循环依赖了。setter循环依赖对于setter的循环依赖是通过spring容器提前暴露刚完成构造,但并未完成其他步骤(如setter注入)...原创 2020-04-06 23:22:21 · 221 阅读 · 0 评论 -
Spring - 理解BeanDefinition
BeanDefinitionSpring容器启动的过程中,会将Bean解析成Spring内部的BeanDefinition结构。不管是是通过xml配置文件的<Bean>标签,还是通过注解配置的@Bean,它最终都会被解析成一个Bean定义信息对象,最后我们的Bean工厂就会根据这份Bean的定义信息,对bean进行实例化、初始化等等操作。从上可知BeanDefinition这个接...原创 2020-03-29 22:15:16 · 314 阅读 · 0 评论 -
Spring - 理解BeanPostProcessor
BeanPostProcessorSpring提供的扩展接口,我们常称为后置处理器,作用是在Bean对象在实例化和依赖注入完毕后,在调用初始化方法的前后添加我们自己的逻辑。注意:是Bean实例化完毕后及依赖注入完成后触发的。接口的源码如下:public interface BeanPostProcessor { /** 实例化、依赖注入完毕,在调用显示的初始化之前完成一些定制的初始化...原创 2020-03-29 20:15:50 · 112 阅读 · 0 评论 -
简单整理 - 常用设计模式
一、工厂模式(对象创建型模式)1、简单工厂模式:通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例2、工厂方法模式:Factory依赖它的子类来定义工厂方法createProduct(),工厂方法返回恰当的产品对象即可。3、抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,每个工厂只能创建一类产品。抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工...原创 2020-03-15 21:55:43 · 184 阅读 · 0 评论 -
理解Java - AQS
java.util.concurrent中提供了许多同步器,比如常用的ReentranLock,ReentrantReadWriteLock ,Semaphore和CountDownLatch。他们都依赖于AbstractQueuedSynchronizer类提供的处理。ReentranLockReentranLock是重入锁,和Synchronized类似。最大不同是synchronized...原创 2020-03-05 14:30:54 · 132 阅读 · 0 评论 -
理解Java - 线程池
Executors创建线程池Executors提供几种创建线程池的方法:Executors.newScheduledThreadPool(); //定时任务线程池Executors.newCachedThreadPool(); //可缓存的线程池Executors.newSingleThreadExecutor(); //单个线程的线程池Executors.newFix...原创 2020-02-29 22:10:12 · 78 阅读 · 0 评论 -
jasperReport - 多Table的PDF中文导出
项目中实际需求:1、多个不定行的表格。2、嵌入可变图片3、PDF导出为中文。基本知识1.下载地址:https://community.jaspersoft.com/community-download目前最新的为:TIB_js-studiocomm_6.11.0_windows_x86_64.exe,实际使用的是TIB_js-studiocomm_6.9.0...原创 2020-02-25 10:52:10 · 1582 阅读 · 0 评论 -
idea中maven下载依赖包出错
在使用Idea的maven工程时,总是不能下载下依赖包。前提:1、settting文件中已经设置为阿里源。2、增加了阿里证书。依然出现如下错误。Caused by: java.lang.RuntimeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.p...原创 2020-02-24 13:47:09 · 365 阅读 · 0 评论 -
元注解@interface的理解使用
@interface 可以用来修饰注解,是注解的注解,称为元注解。(用来自定义注解)注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,JAVAC编译器,开发工具和运行中程序可以用反射取得类以及各种元素上的标记,根据标记做相应的处理。比如:@Override,@Deprecated,@SuppressWarnings等。类结构: public @interfac...原创 2020-02-21 17:24:03 · 496 阅读 · 0 评论 -
JVM动态代理
JVM动态代理使用java.lang.reflect.Proxy类动态的根据您指定的接口生成一个classbyte,该class会继承Proxy类,并实现所有你指定的接口;(您在参数中传入的接口数组)然后再利用指定的classloader将 classbyte加载进系统,最后生成这样一个类的实例,并初始化该对象的一些值,如invocationHandler,以及所有的接口对应的Metho...原创 2020-02-19 16:11:43 · 336 阅读 · 0 评论