- 博客(25)
- 问答 (1)
- 收藏
- 关注
原创 mybatis 对比 spring data jpa
java web 开发者最熟悉的持久层框架,如今莫过于mybatis 以及 sping data jpa 两者都属于orm框架,可能 mybatis 没有在代码层和数据库层有着和非常强烈的绑定关系相比较spring data jpa 而言,毕竟spring data jpa 底层是 hibernate。
2023-12-14 21:24:43 508
原创 https加密传输
现在系统的安全是一个非常重要的问题,我们讨论的是用户数据的安全性,目前没有说绝对的安全,在一些特例的情况下,互联网的数据泄露那简直太easy了,最近开发一个对外的toc系统,以前一致做的是tob,所以不得不恶补了下用户的数据安全性。加密目前是有两种手段,一种是对称加密,一种是非对称对称加密就是指加密和解密用的密钥都是一样的,什么是密钥,可以理解未md5的散列盐值,我们需要一个标准去对数据做该表,然后用这个标准把数据改回来,这就是堆成加密,对称加密有很多,这里我就不列举了。
2023-03-18 21:32:56 660
原创 如何使用springboot 动态数据源零活切换业务逻辑
好久没写博客了,今天续上,我们总是会在一个项目中配置很多的是数据源。对于一些tob tog的公司,开拓新的市场的时候,一般都会根据某一个基线版本做二次开发,然后投入到新市场使用,假如我们需要对这多个市场的某一个同逻辑的业务做数据分析的时候,其实查询的语句和表结构都是一样的,这时候如果在项目配置多数据源加上动态切换数据源的方式就很十方方便,不需要去对应实现多个业务逻辑。
2023-03-18 21:03:53 196
原创 记录一次restteamplat调用出现的ConnectionPoolTimeoutException: Timeout waiting for connection from pool
前言服务突然异常,而且监控的dashboard某一个节点进场自动启停就像心电图一样。。。排查首先看了tomcat的占用,好家伙出问题的机器400多的占用连接,看了下服务的监控表,某一个需要调用三方ai的服务跑了了400、500秒!?怎么会这样,调用AI的restteamplate超时配置也就5秒。第一反应是restteamplat 配置失效了,查看日志,发现日志报了很多Timeout waiting for connection from pool; nested exception is org.
2022-03-03 18:19:14 1697
原创 自定义ResultSet映射对象bean (数据库下划线转驼峰)
private <T> List<T> resultSetToBean(ResultSet resultSet, Class<T> beanClass) { // 获取Bean对象内的所有属性 try { Field[] fields = beanClass.getDeclaredFields(); List<T> beanList = new ArrayList<>
2022-02-17 18:24:40 423
原创 使用GenericTokenParser模仿mybatis进行sql的占位符的替换
public static class SqlTokenParser { static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String handleSql(String sql, Map<String,Object> tableKeys, Map<String,Object> paramKey.
2022-02-17 18:22:25 637
原创 如何在springboot中监控tomcat线程池状态
前言之前线上突然出现了异常的服务之间的调用被决绝,排查问题发现是因为,请求链路中有一个服务请求器restteamplate 并发没有加上,默认是4(两个节点),导致restteamplate 线程池很块被占满,最终导致tocmat线程池也没有可用资源,后续的请求直接被拒绝。所以改了之后想要查看tomcat 的线程池的情况。springboot 1.x@AutowiredServletWebServerApplicationContext applicationContext; TomcatSer
2021-11-09 11:12:23 3944 3
原创 记录一次mongo索引创建过程
前言由于业务需要从mongo的历史库中查询数据,由于mongo历史库非常庞大。所以在mongo中加入索引操作一开始创建索引,忘记加上后台运行,导致rob3t一直卡在执行窗口,通过db.currentOp({$or: [{ op: "command", "query.createIndexes": { $exists: true } },{ op: "insert", ns: /\.system\.indexes\b/ } ] } )找到对应的pid,然后通过db.killOp(pid)删除上一
2021-10-25 10:28:13 238
原创 jvm堆老年代内存不断被占用无法被回收之后
前言最近在做一个变量计算的开发,需要不断在代码中生成初对象,最后将结果统计并且输出到文件中,一开始使用java默认的配置,跑到一半就java.lang.OutOfMemoryError:GC overhead limit exceeded,这个原因大家可以去百度,是因为大部分事件cpu用来做gc回收,但是老年代的对象一直无法被释放,所以jvm为了避免如此进行下去导致最后内存被耗尽,抛出这个异常让我们检查代码,但是这个功能需要一次获取所有并且统计计算,所以没有办法,我就用了暴力的方法,关闭了异常提醒-XX:
2021-10-19 15:22:14 4355
原创 设计模式重看
今天重看了设计模式,感觉其中的几个现在回想起来工作中的一些架构或者代码才发现自己无意中实现使用了很多的设计模式,比如今天突然想到的工作中会设计调用一些三方的资源,我们就把对接这些三方资源的代码单独抽成一个系统模块,也就是耦合了本身服务和三方服务,这就是中介者模式的使用吧...
2021-10-03 10:34:43 81
原创 关于基于redis和kafka实现类似银行叫号
先说今天分享一个之前写的基于redis和kafka实现类似银行叫号前言之前作过某风控系统,系统内会设计调用大量的三方数据,导致每一笔风控审核的时候会出现某一笔的消费延迟导致上游的消费速度显著下降,从而出现严重的卡单(kafka)。确定方案之前通过kafka消费主要是,并发消费,其类比的生活模式是早期银行排队,也就是kafka队列类似银行的多个窗口。假设银行规定,排队之后不能更换窗口,一个数据类似是来银行排队处理的人,比如如果某一个人出现处理速度过慢,那么有可能出现某一些窗口空闲而其他窗口排队很长的
2021-10-03 10:28:50 670
原创 kafka 如何动态设置并发
kafka 并发springboot setConcurrency 决定kafka 并发,kafka 的分区决定了并发上限 ,concurrency<=分区数 ,如果大于分区数并发会等于分区每个分区都是一个有序的、不可变的记录序列,这些记录不断附加到结构化提交日志。分区中的记录被分配给一个顺序 ID 号,称为唯一标识分区内每个记录的偏移量。KafkaBootstrapConfiguration@SuppressWarnings(“rawtypes”)@Bean(name = KafkaLis
2020-11-20 18:07:27 1901
原创 kafka拦截器实现队列插队效果
前言突然出现一个任务需要对kafka处理的数据进行插队操作(内心小崩溃。。。),研究了一下,还是可以使用拦截器进行实现这样的效果的。拦截器(Interceptor)是早在Kafka 0.10.0.0中就已经引入的一个功能,Kafka一共有两种拦截器:生产者拦截器和消费者拦截器。ProducerInterceptor先看代码@Slf4j@Servicepublic class MyProducerInterceptor implements ProducerInterceptor {
2020-10-22 10:20:31 452
原创 分布式的id生成算法(时间分表)
先上代码@Component@Slf4jpublic class GenerateIdUtil {private static String port;@Value("${server.port}")public void setPort(String input){ port = String.valueOf(Integer.valueOf(input)%100);}private static AtomicInteger atomicInteger = new AtomicIn
2020-09-29 09:29:17 430
原创 mysql日期字段datetime和java中Date误差
前言之前用aop做日志记录的时候,对请求的时间差做了处理,用压测之后竟然发现了时间差出现了负数。。。。问题分析aop的使用逻辑 static Map<String, Object> log_aop_containter = Collections.synchronizedMap(new HashMap());@Before("pointCut()")public void doBefore(JoinPoint joinPoint){//存储一条数据,并且将当前数据id和当
2020-09-17 10:18:45 1072
原创 SringAOP @AfterThrowing异常数据库事务未提交
前言今天使用 aop 完成日志记录的时候,before,after,afterreturing都是正常执行完成的。对异常也要进行记录,但是数据存不进去,百度了下是因为数据库的事务也是基于aop,在代码中之前开启事务,代码之后提交事务,但是因为日志的aop在事务的事务之后执行,所以需要设置日志的aop的顺序顺序实现使用Order接口@Overridepublic int value() { return 1;}使用注解的方式@Order(1)数值越小,优先级越高spring实现a
2020-09-13 23:33:36 649 1
原创 kafka踩坑记录
持续更新前言工作需要学习kafka,说实话之前有使用过各种的mq,对于入门来说都是简简单单,很块就能上手。但是这次的kafka入门真的是太心累了,使用window安装还有看启动先使用springboot测试,结果就是抛出一堆问题,就想着用java简单写下cs通信,依然失败,比如broken始终无法创建成功(结果是自己zookeeper问题),然后找各种解决问题的相关博客,结果都是改端口,但是没有一个对上点,都是无效方案,什么改listen,port,奇怪的是有些博客都不写明自己的版本,然后就对问题给出.
2020-09-08 11:46:51 369
原创 fork/join其实很简单
1 前言还记的很久之前一位很时尚的面试官问过,“知道什么是fork/join吗”,“我不会”,“回去等通知吧”。面试就是这么残酷,一个不懂就gg,所以平时还是要多多学习,注重基础的积累,框架在牛也是从基础类库开始构造出来的。那么什么是fork/join框架2 fork/join框架fork/join框架是jdk7提出的一个复杂任务处理方案,它提供了一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。可以通过下面的这张图进行抽象理解其实从f
2020-09-06 14:47:06 704
原创 maven的命令-deploy
maven deploy命令的含义maven deploy命令是将你负责的模块发布到你配置的仓库位置。多模块开发中使用deploy命令配置仓库位置,一般公司都会搭建自己的公司私服,用于加速获取jar以及管理公司的一些技术沉淀工具包之类的<distributionManagement> <repository> <!--稳定版本不会频繁修改的jar的存储位置--> <id>maven-release</id&
2020-09-04 13:36:37 36637 4
原创 springboot-mybatisplus-druid主从多数据源配置
主从架构我们一般在应对高负载的情况,会将数据库设计为主从架构,主(master)负责完成负载比较小的数据修改,从(salve)负责完成负责比较大的数据查询。springboot mybatis-plus配置主从mybatis-plus优势是可以实现像jpa一样完全的零xml开发dao层,并且这个框架只做增强,不影响mybatis原有的任何特性以及功能。springboot yml文件配置spring: datasource: slave: url: jdbc:mysql
2020-09-03 13:27:47 3490 1
原创 线程中的中断
前言其实应该很多人都对线程中断很模糊,java其实并没有给出自带的安全立即退出线程的方法,但是它提供了一个帮助实现安全退出的机制。java中的中断机制java给出了中断机制,但是可能并不是像大多数人那样想,调用如interrupt线程会进行立刻的中断,实际上java的中断机制是提供一个线程控制的帮助,提供中断机制可以判断出线程是不是应改被中断,而实际的中断处理应该在我们的run中进行实现。关于几个中断的方法interrupt isInterrupted interrupted(jdk中没有被废除的
2020-08-29 10:49:23 251
原创 数据库事务
数据库事务的特性基本的四大特性:ACID原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。事务隔离级别数据库中出现的一些
2020-08-20 21:23:53 144
原创 使用nginx以及openssl实现https转http
解决方案:在对工程升级访问协议的时候,其实可以通过代理或者对tomcat进行配置,我是通过tomcat进行设置,通过jdk 生成证书,步骤如下:使用keytool命令生成证书tomcat.keystorekeytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 36500*注意:*最后一步的输入tomcat密钥口令一定要和第一步输入的密码一致,不然tomcat启动就报错出现的问题:在请求
2020-08-20 14:40:21 460
原创 java实现排序九大算法
直接插入排序public class AAddB { public static void main(String[] args) { // int a[]={1,2,34,5,6,74,3,2,4523,42,24,4,555,534}; for (int i=1;i<a.length;i++){ //排序 if(a[i]<a[i-1]){//a[i]被插入数据 ,0~i-1默认是已经排好
2020-08-20 14:35:33 346
原创 vm(centos6)配置网卡(基于win7)
我们一般使用的是window通过 vm搭建linux 环境来作为初学Linux作为服务器,但是我们我们通常工作在不同的局域网中,家庭还有公司,所以在配置网卡的时候我们一直是通过配置固定的ip,但是我们经常需要linux能够连接外网,因为我们需要yum很多的额外资源,比如说,使用maven的时候 ,我们需要在镜像或者是maven中央仓库中down很多的第三方jar包。这个时候,我告诉大家一种配置方式------通过配置本地的回环换卡。(window 与 linux 配置)回环网卡网卡不就是给本地主机配.
2020-08-20 14:31:05 320
空空如也
请问 mybatis中的 association 可以嵌套使用吗
2018-04-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人