java Map通过遍历器Iterator来实现遍历过程中删除元素来避免ConcurrentModificationException异常

原创 2023-02-08 15:54 阅读(512)次
java的普通map和list在遍历时是不能新增或删除对象的,否则会报ConcurrentModificationException异常。那么怎么解决呢,我们可以使用ConcurrentHashMap和CopyOnWriteArrayList来替换掉普通的map和list。也可以使用遍历器来做。 代码参考如下: ```java Map frequentlyVisitedLocationsMap = new HashMap<>(); Iterator> iterator = frequentlyVisitedLocationsMap.entrySet().iterat...

QLExpress在脚本中执行Java代码

原创 2022-12-09 11:06 阅读(1832)次
QLExpress可以执行java代码,但要注意控制可执行的代码范围开启代码黑名单或白名单,否则容易出现被利用。 开启白名单示例代码如下: 举个例子,我要替换掉有mt开头的字符 ``` public static void main(String args[]) throws Exception { QLExpressRunStrategy.setForbidInvokeSecurityRiskMethods(true); QLExpressRunStrategy.addSecureMethod(CommonUtil.class, "star...

QLExpress if判断以及多个if else如何写

原创 2022-12-09 09:42 阅读(1853)次
项目有用到QLExpress表达式运算,需要使用到它的if判断,而且是多个if else,ql也支持,很灵活,参考代码如下: ``` public static void main(String args[]) throws Exception { ExpressRunner expressRunner = new ExpressRunner(); String expressValue = "if(a+b==12)then{return 1;} else if(a+b==11)then{return 2;} else {return 3;}";...

HsqlDB如何修改字段定义

原创 2022-11-23 18:14 阅读(350)次
HsqlDB如何修改字段定义? 我最近在用HsqlDD作为java web应用的嵌入式数据库,我想要修改表字段的定义,我们通用的数据库都是用alter table 的方式修改表字段定义,但是我看了HsqlDB的官方文档,却没有直接给出示例,看了好久文档才搞出来一个alter table修改字段的定义。 语句如下: ``` ALTER TABLE user ALTER COLUMN user_name SET DATA TYPE VARCHAR(1000) ``` 当然如果你跟我们一样,用HsqlDD作为java web应用的嵌入式数据库,也可以直接通过修改数据库的脚本定义文件x...

HsqlDB多事务并发读写控制

原创 2022-11-18 13:56 阅读(473)次
最近发现我的工具项目中的hsqldb单表操作会有并发排斥,也就是说只能单线程写操作某张表,如果此时事务没有提交,那么别的线程连读取这张表都会被阻塞住。这下麻烦了,那么万一某个事务大一点,那么这张表不就是串行了么!! 查了半天官方文档,终于看出点眉目,官方说hsqldb目前是已经完全支持多线程操作事务了,原话如下: ``` HyperSQL supports three live switchable transaction control models, including fully multi-threaded MVCC, and is suitable for high per...

ubuntu安装内网带宽测试工具iperf3

原创 2022-11-11 09:06 阅读(3802)次
在几台ubuntu机器安装了一套clickhouse集群,但不知道网络带宽满足要求不,于是要测试一下内网的带宽情况。 这里我使用的是内网带宽测试工具iperf3来测试。 先安装 sudo apt install iperf3 使用iperf3 iperf3 -s启动端口 参考如下: ```shell root@ck1:/home/mytools/bin# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -------...

Clickhouse2022开源路线图(重大特性的实现蓝图),看看有没有你想要的

原创 2022-11-01 16:43 阅读(701)次
clickhouse更新太快,2022又发布了很多新特性,截止今天还有部分新特性还在开发中,我列举一些大家可能比较关注的: 1.使clickhouse-keeper生产准备就绪,意味着官方已经推荐生产上替换掉zookeeper了 2.支持备份和恢复: 备份表、数据库、服务器和集群; 增量备份、支持部分恢复; 支持可插拔式的备份存储选项。 3.事务支持(还在开发中) 4.支持轻量化的删除 5.存算分离(还在开发中) 6.流式查询(还在开发中) 7.join优化(还在开发中) 还有很多特性我没列出,其他大家可以[点这查看详细](https://...

使用hsqldb工具连接嵌入式数据库hsqldb

原创 2022-10-08 17:42 阅读(994)次
最近在写一个工具,用了HsqlDB来当作这个工具的本地数据库,但是有一个烦恼就是自己建的表和数据不能用工具浏览,查了一下官网说自带了swing操作界面的工具,于是研究了一下,还真能连接。 用这个工具要下载数据库,不大100多MB,操作如下: 下载数据库 https://sourceforge.net/projects/hsqldb/files/ 解压到E:\mytools\hsqldb-2.7.0\中 执行E:\mytools\hsqldb-2.7.0\hsqldb\bin中的runManagerSwing.bat 但是里面的命令是java,要求jdk11以上,所以要下载一...

设置jar包启动的JDK来选择要运行的jdk版本

原创 2022-10-08 11:28 阅读(3220)次
我们开发好java工程时打包成jar包,发到一台服务器或个人电脑中时发现机器上的jdk满足不了这个jar包,这时就需要我们给这个jar单独配置一个jre。 首先我们可以去Oracle官网下载一个可以直接运行的jdk(jre),不需要修改环境变量。 然后我们可以编写一个启动这个jar包的脚本,分windows和linux,这里只说这两个,如果我要运行license-create-0.0.1-SNAPSHOT.jar,脚本如下: windows,通过设置运行时环境变量来实现选择自己要运行的jdk: ```bash @echo off set curr_path=%~dp0 set t...

HsqlDB数据库自增长的两种方式

原创 2022-09-23 18:43 阅读(651)次
HsqlDB数据库自增长的两种方式:一种是IDENTITY,一种是使用SEQUENCE序列;下面介绍一下这两种方式,包括insert后如何获取最后的自增id; 自增: CREATE TABLE mt_data_source ( id INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY, name varchar(255) DEFAULT NULL, ); 序列自增: CREATE SEQUENCE seq CREATE TABLE star (id INTEGER...

idea中运行springboot jsp工程找不到页面的问题

原创 2022-09-09 18:11 阅读(563)次
使用idea开发springboot jsp项目,发现原来在eclipse中能运行,却在idea中打不开页面,显示404,不知道你们有没有遇到过,网上找了很方法发都不适合我,大家可以进来看看我这个问题是不是跟你们的一样。 网上大部分的人遇到的问题都是在springboot启动配置Working Directory就可以,如下图: ![](http://img.classinstance.cn/20220909/1662717711106.jpg) 但我的问题怎么设置都不行,如下图: ![](http://img.classinstance.cn/20220909/16627...

如何用js查看浏览器的时区

原创 2022-09-09 15:18 阅读(2230)次
我们想在js中获得当前时间的时间戳前,需要确认当前浏览器的的时区是否正确设置,那么如何在js中查看时区呢? 代码如下: ```javascript Intl.DateTimeFormat().resolvedOptions().timeZone; ``` ==》输出 'Asia/Shanghai' 确认时区对了,这时我们就可以放心大胆的去获得时间戳了: ```javascript new Date().getTime() ```
js

如何缩小jre1.8

原创 2022-08-29 16:03 阅读(862)次
我们在打包java软件时,也可能会把jdk或jre打包进去,而原版jdk1.8或jre1.8有200MB,这时就希望把jdk或jre缩小到理想范围内。缩小的思想是把不需要的依赖文件删除,(如果要更进一步删除一些类就需要更专业的软件,这里我就没法介绍了),具体如下操作: ``` 下载Oracle官网的JRE包,最终下载的包如下: jre-8u181-linux-x64.tar.gz 解压JRE包并删除不必要的文件 #解压 tar xf jre-8u181-linux-x64.tar.gz #进入目录 cd jre1.8.0_181/ #删除文本文件 rm -rf COPYRI...

java.lang.NoClassDefFoundError: de/schlichtherle/license/LicenseManager

原创 2022-08-25 14:04 阅读(2051)次
在idea中使用truelicense开发license授权时,启动工程报错LicenseManager类找不到:nested exception is java.lang.NoClassDefFoundError: de/schlichtherle/license/LicenseManager。 具体错误如下: ``` org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: de/sc...

java DelayQueue延时队列的应用

原创 2022-07-07 13:39 阅读(562)次
DelayQueue是一个线程安全的(ReentrantLock实现)、无界的(通过grow(int minCapacity)自动扩容,写不阻塞)、阻塞的(take方法会阻塞)、延迟(元素需要实现Delayed接口)队列,加入其中的元素必需实现Delayed接口。当调用put之类的方法加入元素时,会触发接口中的compareTo方法进行排序,也就是说队列中元素的顺序是按到期时间排序的(当然,compareTo方法需要我们自己去实现,如果实现不当,可能导致队头元素是没有过期的,而其他元素可能已经过期了),而非它们进入队列的顺序。排在队列头部的元素是最早到期的,越往后到期时间赿晚。没有过期元素的话...

获取eureka的注册服务的实例列表

原创 2022-07-05 16:54 阅读(1245)次
如果获取eureka中服务对应的实例列表? 代码如下: ```java @Autowired private SpringClientFactory factory; ``` ```java ILoadBalancer lb = factory.getLoadBalancer("xxxx"); //指定服务名 List allServers = lb.getAllServers(); List upServers = lb.getReachableServers(); ``` 运行结果: ...

java阻塞的线程安全的优先级队列PriorityBlockingQueue

原创 2022-07-05 14:52 阅读(1324)次
### 优先级队列PriorityBlockingQueue - PriorityBlockingQueue是一个无界的基于数组的优先级阻塞队列,是线程安全的。 - 数组的默认长度是11,虽然指定了数组的长度,但是可以无限的扩充,直到资源消耗尽为止。 - 每次出队都返回优先级别最高的或者最低的元素。 - 默认情况下元素采用自然顺序升序排序,当然我们也可以通过构造函数来指定Comparator来对元素进行排序。 - PriorityBlockingQueue不能保证同优先级元素的顺序。 代码如下: 用户model: ```java public UserInfo(Int...

java程序员多线程常见的代码bug

原创 2022-07-03 09:36 阅读(1011)次
**目录** [TOC] #### 前言 这篇文章主要用来记录我所收集的一些多线程环境下,java程序员常见的或者说容易忽视的、重要的、容易产生bug的代码样例,以此来加深自己对这些场景代码的印象,让我们一起少掉坑。文章会陆续更新,尽自己能力收集更多的样例。 #### CountDownLatch的错误使用 ```java CountDownLatch countDownLatch = new CountDownLatch(voGroupByBucketName.size()); for (......) { executorService.submit(() ...

clickhouse删除数据时报错

原创 2022-06-13 14:02 阅读(3120)次
今天执行了一下ck的表数据删除报错,错误信息如下: ``` ClickHouse exception, code: 1002, host: 192.168.29.124, port: 18123; Code: 341. DB::Exception: There was an error on [192.168.29.126:9000]: Code: 341. DB::Exception: Exception happened during execution of mutation '0000000000' with part 'all_3_3_0' reason: 'Code: 198....

postgresql jdbc driver驱动连接属性列表

原创 2022-05-26 11:32 阅读(1648)次
想清楚postgresql jdbc driver中的连接属性含义,找了半天找不到类似的解释说明,只好上官网查了下,官网上已经都列出来了,这里分享一下地址: [https://jdbc.postgresql.org/documentation/head/connect.html](https://jdbc.postgresql.org/documentation/head/connect.html "https://jdbc.postgresql.org/documentation/head/connect.html") 这里列举几个常用的: loginTimeout = int ...

BeanDefinitionRegistryPostProcessor作用及加载顺序

原创 2022-02-15 11:53 阅读(1058)次
BeanDefinitionRegistryPostProcessor接口常用于给接口动态添加代理类。这个接口中有一个方法如下: ```java public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor { /** * Modify the application context's internal bean definition registry after its * standard initialization. All regular bean ...

BeanDefinitionRegistryPostProcessor的实现类中注入不了类

原创 2022-02-15 10:52 阅读(1401)次
最近在用BeanDefinitionRegistryPostProcessor实现接口生成动态代理的功能,BeanDefinitionRegistryPostProcessor的实现类中想取的配置类,但发现一直取不到springboot中的配置。 配置类代码如下: ```java @Data @Component @ConfigurationProperties("my.netty.feign") public class NettyFeignConfig { /** * netty feign扫瞄的目录 */ private Strin...

Clickhouse批量删除分区

原创 2021-12-09 00:57 阅读(8015)次
clickhouse表一般都会做分区,而删除数据最快的方式就通过删除分区进行,在维护数据生命周期中,一般我们都会定时删除分区来达到目的,这里就会涉及批量删除分区的动作。 那么我们怎么进行批量删除分区呢? 我们知道用如下语句删除分区: alter table 表名 drop partition 分区名 分区名可以通过以下语句查询出来: select * from system.parts p where table = '表名' ![](http://img.classinstance.cn/20211209/1638982921708.jpg) 如上图所示我们上面语句查询出来...

java List数据内存分页

原创 2021-12-08 13:33 阅读(2405)次
我们常常要对List数据切分和分页,最近客户要求我们调用第三方接口拿到所有数据然后做分页返回给他 们,全量数据拿到后都是在缓存在内存中,这不像查询询数据库有语句支持,于是我们就搞了个List分页的工具类。这里分享一下我们使用的分页工具类。代码其实也是简单的,没什么难度,关键是提供给急需的朋友们。 上代码: ```java import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class ListPageUtil { /** ...

java stream去重的几种方式

原创 2021-12-01 16:23 阅读(40051)次
我们在操作stream时,如果遇到转map时,如果不处理key重复,就会报错Duplicate key,今天就分享一下我们在操作java stream时如何去重,有哪几种方式。 例如我们源数据有,以下很多例子都使用list来操作 ```java List list = new ArrayList(); list.add(new UserInfo(1,"小明",1)); list.add(new UserInfo(2,"小s",2)); list.add(new UserInfo(1,"小明",2)); ``` 如果我们要将上面数据去重,按id转换成map,有三种...

java接口中定义成员变量后会被不同实现类修改,别忘记接口变量默认是public static final

原创 2021-11-18 16:43 阅读(1942)次
今天定义了一个接口,它有很多实现类,为了把实现类中的相同的变量抽出去,于是我把它放在了接口类中。 代码如下: 接口代码: ```java public interface ValueHandle { public Map generateModeSupportMap = new HashMap<>(); } ``` 实现类代码: ```java public class DateValueHandle implements ValueHandle { @Override public void afterPropertiesSet() th...

java如何减少if判断让代码优雅一点:采用Map+工厂模式实现

原创 2021-11-18 12:27 阅读(2292)次
最近在写一个数据生成工具,代码中需要判断各种数据类型,有一个枚举中定义了很多类型,根据这些不同类型有不同的操作,于是我写了一大排的if,把自己都给搞晕了,代码大致如下: 数据类型枚举定义: ```java public enum GenerateDataType { /** * 自增,对应java的Long */ AutoIncre(), /** * 字段串类型 */ String(), /** * 数字 */ Number(), /** ...

java表达式运算性能比较:Jep与QLExpress

原创 2021-11-18 09:48 阅读(1789)次
#### 前言 之前我有分享过java的表达式运算,由于我的业务要求表达式中要有业务变量,例如要根据id和orderNumber动态生成一个单号,表达式的定义如下所示: id+orderNumber 所以我们需要一个支持替换变量的表达式计算引擎,开始我们选择了jep,但后面发现我们业务中的jep表达式计算秒级只能做到2300条左右,这太慢了,于是我再找了下其他引擎,发现阿里开源了一个,名叫QLExpress,地址:[https://gitee.com/cuibo119/QLExpress](https://gitee.com/cuibo119/QLExpress "https://git...

存算分离与存算一体的优缺点比较

转载 2021-11-02 10:05 阅读(5178)次
#### 分布式数据库是时代的选择 从1970年IBM的E.F Codd在论文《A Ralational Model of Data for Large Shared Data Banks》中提出的数据库系统关系模型,开创了数据库关系方法和关系数据理论的研究,为数据库技术奠定了理论基础,到1977年 Oracle数据库发布,开启了IBM DB2和Oracle等大型商业公司垄断数据库市场二十年。 直到90年代中期,随着互联网时代的来临,开源数据库MySQL,PostgreSQL的出现,这种垄断现象才被打破,以MySQL为代表的开源数据库开始迅速发展。 21世纪10年代,数据的井...

LOG_PATH_IS_UNDEFINED/info.log (No such file or directory)

原创 2021-10-18 17:42 阅读(1908)次
本文介绍解决java.io.FileNotFoundException: LOG_PATH_IS_UNDEFINED错误。 微服务在本地部署没有问题,部署在rancher中却报如下错误: ``` 2021-10-18 17:10:47.886 ERROR [pip-data-lifecycle-management] [10.42.2.53:serverPort_IS_UNDEFINED] [main] o.s.boot.SpringApplication : Application run failed java.lang.IllegalStateException: Logba...