C1-Java
一些Java语言笔记
Jone_ZhangH
学习路上默默前行的男人
展开
-
【Java】Elasticsearch基于BoolQueryBuilder筛选栏位为null
需求现存在连接和批量两种场景:联机服务键值为appName批量服务键值为batchId存在一个es,存储两套服务异常交易数据。现想提供查询接口,从这个es中分别获取联机异常和批次异常。代码使用QueryBuilders.existsQuery处理 // 联机判断 bool.must(QueryBuilders.existsQuery("appName")); // 批次判断 bool.must(QueryBuilders.existsQuery("batchId"));..原创 2022-04-12 20:06:48 · 2665 阅读 · 0 评论 -
【JAVA】实现服务启动时通过配置加载不同RabbitMq集群
需求为了高可用,防止一些突发场景(比如说XX光纤被挖事件)。现在很多公司都会做异地灾备。对于异地服务,鉴于通信耗时问题,一般深圳地区的服务,都连着深圳地区的数据库或其他中间件。实现加载配置类(RabbitProperties是spring自带的,基于它搞事)@Configuration@ConfigurationProperties(prefix = "spring.rabbitmq.xx")@ConditionalOnProperty(name = "test.cache.enabled",原创 2022-03-03 16:31:21 · 2433 阅读 · 0 评论 -
【JAVA】主线程抛出采用线程池时子线程异常错误
前言:有个批量需求,想读一张表A数据,用此表数据维护其他表数据。因数据量可能很大,采用了单线程读表A,多线程处理其他表数据。遇到问题不做处理时,子线程异常是不影响主线程的。参考了很多网上代码,如: ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 100, 30L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), nam原创 2022-03-02 19:19:14 · 1150 阅读 · 0 评论 -
@Transactional注解导致service注入失败的一种场景
Spring如何实现事务Spring的核心是IOC和AOP(Aspect Oriented Programming)。AOP是面向切面编程,使用动态代理技术,动态代理内部实现用的是反射。Spring的事务是通过aop来实现的。Spring的代理模式有两种:java自带的动态代理模式和cglib代理模式问题代码模型抽象类:public abstract class abstractTemplate { @Autowired private TestService service;原创 2021-12-24 11:28:26 · 751 阅读 · 0 评论 -
Java通过RestTemplate实现路由功能
思路通过拦截器,拦截请求,并将请求报文存入ThreadLocal中。后续直接使用,转发。代码拦截器:@Configuration@Import(BeanPostProcessor.class)public class Configuration { /** * 拦截请求,数据处理. */ @Bean @ConditionalOnProperty(name = "enabled", havingValue = "true", matchIfMissin原创 2021-12-06 20:16:15 · 1051 阅读 · 1 评论 -
[jGit]java代码push时删除文件不能上传问题
背景需要开发一套管理系统,需要使用Jgit公共jar包完成java代码对Git的操作。引入jar包版本:org.eclipse.jgit:org.eclipse.jgit:5.1.3.201810200350-r代码: public void pushExistProject(File directory) { try { Git git = Git.open(directory); git.add().addFilepatt原创 2021-12-06 19:51:38 · 450 阅读 · 0 评论 -
【Java】判断对象是否存在有值的属性
最近在搞个项目,需要做到请求一个接口,这个接口可能涉及多张表的字段。做一套公共机制,可能直接根据是否上送了某张表的栏位更新对应表的值,没涉及的表则不更新。思路将接口dto采用copy工具,给入到一个个类中,然后判断每个类是否存在有值得属性。public class ObjectUtil { public static boolean hasContent(Object object) { return hasContestWithoutKeys(object, Collections.singl原创 2021-03-01 20:21:03 · 3533 阅读 · 0 评论 -
java正则表达式控制半角字符串输入
@Pattern(regexp = "^[\\x00-\\xff]*$")原创 2021-01-11 19:38:42 · 1152 阅读 · 0 评论 -
Java实现多字符串之间拼接符号
代码:public String join(String delimiter,CharSequence... chars) { return Arrays.stream(chars).map(s -> StrUtil.isBlank(s) ? "":s).collect(Collectors.joining(delimiter));}这写法多个字符串没有值也会拼接符号,比如说空格和"abc"就拼接成了",abc"。mark下仅供参考。...原创 2020-11-25 21:22:45 · 1490 阅读 · 0 评论 -
HtmlUnit解决https证书不信任问题
使用HtmlUnit请求网页地址时报错九月 10, 2020 4:37:41 下午 com.gargoylesoftware.htmlunit.javascript.DefaultJavaScriptErrorListener loadScriptError严重: Error loading JavaScript from [https://---------------------------].javax.net.ssl.SSLHandshakeException: sun.security.原创 2020-09-10 16:42:09 · 1059 阅读 · 0 评论 -
解决gradle项目Configure build下载慢的问题
Gradle加载依赖很慢,换成国内源repositories { //使用国内源下载依赖 maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenCentral()}原创 2020-09-10 11:55:49 · 1481 阅读 · 0 评论 -
Java使用graphql client
注意事项1.引入jar包版本注意用1.2以上的,1.1没有addObjectParameter方法,对json报文格式处理有欠缺。org.mountcloudgraphql-client1.22.返回的数据格式为map,建议使用阿里大佬开源的fastjson包解析。代码记录private final String url = "http:xxxxx";private final String token = "Bearer xxxxxxxxxxx";public Object que原创 2020-09-01 17:30:59 · 2294 阅读 · 5 评论 -
Java写CSV文件双引号逗号不转义
问题CSV文件默认逗号换单元格,现想将一对字符串写入CSV的同一单元格中。字符串内容是json格式{“0”:1000,“100”:59,“22”:12}这里既有双引号也有逗号。不让逗号转义直接将内容加上双引号包含起来即可。解决方法String data = "{\"0\":1000,\"100\":59,\"22\":12}";BufferedWriter stream = new BufferedWriter(new OutputStreamWrite(new FileOutputStre原创 2020-09-01 16:59:24 · 1906 阅读 · 0 评论 -
Java时间戳字符串转时间格式字符串
需求java中需将1597800000时间戳格式的字符串转成日期格式的字符串。代码 private static final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public String timeStampToDate(String time) { return new SimpleDateFormat(TIME_FORMAT).format(new Date(Long.parseLong(time + "000"))); }...原创 2020-08-20 16:36:35 · 1843 阅读 · 0 评论 -
【正则表达式】控制小数点前后数字个数
@Pattern(regexp = "^([1-9]\\d{0,14}|0)([.]?|(\\.\\d{0,4})?)$") private String amt;原创 2020-08-03 19:53:52 · 1244 阅读 · 1 评论 -
【正则表达式】支持不输入或输入只允许个别字符
@Pattern(regexp = "^$|^([YN])$" , message = "错了错了") private String inputFlag;原创 2020-07-31 17:27:23 · 1261 阅读 · 0 评论 -
Mybatis plus多筛选条件批量更新
前提mybatis plus 自带的updateBatchById方法很6,可以支持使用key批量更新数据。不过因需求要求,现遇需根据多栏位筛选批量更新,很是伤感(吃现成的最开心了)。源码:public boolean updateBatchById(Collection<T> entityList, int batchSize) { Assert.notEmpty(entityList, "error: entityList must not be empty"); St原创 2020-07-27 09:47:51 · 16245 阅读 · 6 评论 -
责任链模式实现链路中注入服务
前言项目中使用到责任链模式重构代码,每个责任的链路中需要引用其他服务方法。按一般责任链的写法是new 链路对象,此时则不适用。正文主要思路是采用接口+Ordered类。接口:public interface BaseHandler extends Ordered { boolean doHandle(InputDTO inputDto);}链路实现:@Componentpublic class FirstHandler implements BaseHandler { @Autow原创 2020-07-02 19:52:01 · 745 阅读 · 0 评论 -
【转载】使用 Mockito 修改私有属性
分享一篇好文使用mockito做单元测试时,欲对一些私有变量进行mock。头大中,故百度。来自大佬:链接 https://yanbin.blog/mockito-modify-private-field/, 来自 隔叶黄莺 Yanbin Blog正文修改私有属性来 Mock 可能不是一种很好的测试方式, 因为属性名是动态的,但有时不得已而为了,例如下面的代码:public class UserService { private ExternalApi external = Externa转载 2020-07-02 10:50:05 · 9955 阅读 · 1 评论 -
【整理】目标移除fastjson,采用jackson的一些方法使用
前言最近官方宣布fastjson有漏洞,于是一波修改需求迎面扑来。总结下使用jackson的写法。实战0.前置,需要定义ObjectMapper对象,才进行json的格式处理。ObjectMapper mapper = new ObjectMapper;1、Map对象(自己看着玩吧)转Json格式字符串Map<String,String> map = new HashMap<>();map.put("abc","123");try { System.out.pr原创 2020-06-19 16:22:34 · 526 阅读 · 0 评论 -
Mybatis plus实现Distinct去重功能
不啰嗦,上菜 QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.select("DISTINCT no,name").orderByAsc("no"); return mapper.selectList(queryWrapper);PS:顺便一提,指明查询出后的结果输出类型,可以参考如下: QueryWrapper<TablePo> queryWrapper = new QueryWrapper<>原创 2020-06-05 19:24:55 · 65548 阅读 · 8 评论 -
Orcale 12 + mybatis plus同时实现键值用户输入和自增
需求因需求需要,迁移数据库,由原来的db2迁移到oracle。同时上线后db2与oracle会并行运行一段时间,同时保证数据一致性。于是需要实现新系统创建服务:传入键值时,按键值插入到数据库;未输入时,键值按数据库自增形式插入。实现建表语句CREATE TABLE 表名 ( ID NUMBER(10,0) GENERATED BY DEFAULT AS IDENTITY , NAME VARCHAR2(10), PRIMARY KEY(ID));Java代码对应数据库的dto原创 2020-06-04 20:25:15 · 226 阅读 · 0 评论 -
Orcale 12 + mybatis plus实现自增(不用新增序列)
本人不喜废话,直接上代码了。建表语句CREATE TABLE 表名 ( ID NUMBER(10,0) GENERATED ALWAYS AS IDENTITY , NAME VARCHAR2(10), PRIMARY KEY(ID));Java代码项目中,先增加对应插件@Configurationpublic class Configuration { @Bean public IKeyGenerator keyGenerator() { return new Oracle原创 2020-05-28 09:54:03 · 639 阅读 · 1 评论 -
Orcale + mybatis plus实现自增(新增序列)
本人不喜废话,直接上代码了。建序列CREATE SEQUENCE 序列名MINVALUE 1MAXVALUE 10000000START WITH 1INCREMENT BY 1CACHE 20NOCYCLENOORDER;Java代码项目中,先增加对应插件@Configurationpublic class Configuration { @Bean public IKeyGenerator keyGenerator() { return new OracleKeyGe原创 2020-05-28 09:45:54 · 1327 阅读 · 1 评论 -
Java实现QueryWrapper分页查询
前言最近在用mybatisplus,遇到个需要分页的需求,百度后发现可以使用page功能,但查询后的结果一直是全量。一圈研究发现需要引入mybatisplus的分页插件(官网上有)。实现mybatisplus分页插件: public class MyBatisConfiguration{ @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); }原创 2020-05-22 08:31:31 · 19713 阅读 · 0 评论 -
Java实现以某栏位Elasticsearch聚合查询
设置筛选条件:private QueryBuilder setCondititon(Long lowTime,Long upperTime){ return boolQuery().must(rangeQuery("time").gte(lowTime).lte(upperTime));}设置AGG聚合查询private TermsAggregation queryByMinute(QueryBuilder queryBuilder){ var groupByTeamAgg = terms("原创 2020-05-13 18:58:19 · 178 阅读 · 0 评论 -
Java实现以时间维度Elasticsearch聚合查询
设置筛选条件:private QueryBuilder setCondititon(Long lowTime,Long upperTime){ return boolQuery().must(rangeQuery("time").gte(lowTime).lte(upperTime));}设置AGG聚合查询private HistogramAggregation queryByMinute(QueryBuilder queryBuilder){ var groupByMinuteAgg = d原创 2020-05-13 18:52:38 · 977 阅读 · 0 评论 -
Java实现Http的Get请求发送Json格式报文
主函数代码块: HttpClient httpClient = HttpClientBuilder.create().build(); // Get请求 URIBuilder uriBuilder = new URIBuilder(payurl); if (StringUtils.isNotEmpty(reqJson))...原创 2020-04-14 19:16:45 · 3997 阅读 · 1 评论 -
Java实现Json转GET请求字符串
代码: /** * json格式转Get * @param body * @return */ private String jsonToGet(String body){ return body.replace("{", "").replace("}", ""). replace("\"", "")...原创 2020-04-14 19:10:48 · 2077 阅读 · 0 评论 -
HmacSHA256签名验签
直接代码: public static String signWithHmacSHA256(String message, String secret) { if (StringUtils.isBlank(secret)) { return null; } try { Mac HmacSHA256 =...原创 2020-04-14 19:07:02 · 2535 阅读 · 0 评论 -
【java.security.SignatureException: Signature length not correct】的解决办法
错误信息对接某家公司的接口,涉及String转ASCII,验签时候报错。java.security.SignatureException: Signature length not correct: got 344 but was expecting 256错误原因签名长度不正确:实际值为344,但期望值为256在生成签名的时候,用的是 Base64.encodeBase64Strin...原创 2020-03-31 19:59:47 · 10245 阅读 · 0 评论 -
Java使用Cipher类实现加解密
加密 public static byte[] encrypt(byte[] msgBuf, byte[] keyBuf, byte[] iv) { Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); DESedeKeySpec keySpec = new DESedeKeySpec(keyBuf);...原创 2020-02-26 10:23:59 · 1818 阅读 · 0 评论 -
通过别名获取阿里KMS管理的密钥遇到的问题
公司需要使用阿里提供的kms密钥管理服务,为验证服务能够正常使用。使用公司申请的测试秘钥资源进行测试。1、使用阿里提供的demo代码,验证能够正常读取、加密、解密功能。(ps:主要是注意配置的权限问题,基本正常)2、本地服务验证。由于规则要求是使用秘钥别名获取信息。所以测试时候也一直用别名带入逻辑运行。代码操作简略如下:public static byte[] encrypt(Stri...原创 2020-02-26 10:12:03 · 1142 阅读 · 0 评论 -
Play框架,yyyyMMddhhmmss格式数据检查
1、通过正则表达式:@Pattern("^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-...原创 2020-01-13 11:16:42 · 339 阅读 · 0 评论 -
Java获取当前时间到格林威治时间1970年01月01日00时00分00秒的秒数
前言最近一个需求需要对接某全球性组织,接口文档对某栏位的描述如下:which is the number of seconds from 1970-01-01T00:00:00Z UTC从格林威治时间1970年01月01日00时00分00秒到当前时间的秒数实现代码JSONObject header = new JSONObject() .flu...原创 2019-12-24 19:41:34 · 3841 阅读 · 0 评论 -
Play框架加载配置项type OBJECT rather than问题
前言在使用play框架,通过Play.application().configuration().getString获取配置项信息时,运行报错不能注入。Caused by: org.springframework.beans.factory.BeanCreationException:Could not autowire field错误信息Caused by: org.sprin...原创 2019-12-23 16:10:09 · 558 阅读 · 0 评论 -
Java实现读取CER文件
实现代码 /** * getPlkformCer: 从CER文件中获取公钥 * @param strCer 文件存储目录 */ private static PublicKey getPlkformCer(String strCer){ FileInputStream bais; try { Ce...原创 2019-12-23 11:06:16 · 5432 阅读 · 0 评论 -
Java实现读取PFX文件
实现代码 /** * getPvkformPfx: 从PFX文件中获取私钥 * @param strPfx 文件存储目录 * @param strPassword PFX密码 */ private static PrivateKey getPvkformPfx(String strPfx, String strPassword){ ...原创 2019-12-23 10:57:50 · 1825 阅读 · 1 评论 -
openssl根据公钥生成证书
前言之前学习了下从证书中提取公私钥,但是对外提供我方的公钥信息还是要以证书作为载体。操作第一步:生成CA证书和私钥openssl req -newkey rsa:2048 -nodes -keyout cakey.pem -x509 -out cacert.cer第二步:生成公司csr文件和临时私钥openssl req -newkey rsa:2048 -nodes -keyout...原创 2019-12-20 20:22:35 · 2162 阅读 · 0 评论 -
String转BigDecimal问题之千位符字符串
问题描述对接项目中,遇到对面返回金额栏位超过了千位,自带“,”-千位符的情况,原设计中未考虑此情况,直接使用new BigDecimal(str);的方式处理,此时系统就呵呵哒了:解决办法1.很简单,而又不高大上的处理方式:将字符",“转换成”" try { String replaced = str.replace(",", ""); ...原创 2019-12-20 15:21:12 · 2997 阅读 · 1 评论