Java技术总结

ps:一下技术都在本地有实现,不信可以立即演示

功能总结

上传
下载
导出 excel,html pdf
导入
xml解析
properits解析
跨域
前后台发送请求
Echart图表
文本解析性能提高
多数据源解决方案
简单的登录系统
时间戳:
    主系统访问子系统页面因为浏览器缓存而导致有几率不进子系统Controller层
    实现:a标签+时间戳的方式访问子系统(防止子系统走缓存页面而不走Controller层)。
防盗链:子系统防盗链来确保跳转源是平台页面
。。。

Java第三方

org.apache.commons.fileupload
    实现文件上传,当然,现在都是用MVC提供的MultipartFile 去实现
org.dom4j
    实现对xml文件解析
org.apache.poi.xssf
    实现excel解析
org.springframework.web.client.RestTemplate
    后端发送请求模板 
javax.mail:
    发送邮件
javax.servlet.Filter
    过滤器
com.itextpdf.text.pdf
    pdf文件解析

java类库

javax.servlet.http.Session
    session会话存放用户信息,权限
java.lang.Thread & java.lang.Runable
    多线程
java.lang.ThreadLocal
    作用:不同的线程访问同一个ThreadLocal对象,不会互相干扰
	场景:数据源动态切换
java.lang.Comparable
    作用:类排序需要实现此接口
java.lang.Process
    调用进程执行命令(shell)
java.lang.String & StringBuilder & StringBuffer
    字符串拼接实现类区别
java.util.stream
    stream流用于对集合进行操作
java.util.regex
    作用:正则匹配
    场景:业务需要对大文本文件循环解析,先正则匹配出需要的信息,提高效率
        一:需数据为文本的第 xx行至 xx行 ,以命令a开头,命令b结尾(a,b唯一)
            用正则先截取出有效文本放入内存,再用内存去解析
        二:所需数据零散分布整个文本:
            用list返回所有匹配成功的字符串即可。
java.util.zip.ZipFile
    实现zip文件解压缩
java.util.Iterator
    所有实现了Collection容器的类都有,用于遍历容器
java.util.Properties
    从 .Properties解析获取数据
java.io
    java IO 流 用于读写文件
java.io.File
    代表系统文件名 (路径+文件名),定位文件
[]
    java数组

java技术

redis
    项目名称:
        测试管理平台项目(2019):简称B
    项目业务:
        1.每天每隔两小时同步 前后半个月的 app A 的数据库到自己的服务器上,主从分离,只用来查询 缓解 app A的压力
        2.B项目 同步过来的数据根据数据的版本 分库多数据源存放(放在一起数据流过大)
        3.B项目 采用分布式异步同步,即同一个应用服务器部署多个B项目同时走缓存任务
        4.同步的过程需要频繁的动态切换数据源
          如果将数据源-ip 存入关系型数据库,多个B应用每天不间断读取性能不高
          如果用静态常量表示,又得考虑线程,且不好维护
          而redis就很适合
    使用:
        1.主应用(web)定时器每隔1小时将所有缓存任务的 key 存入 redis,如果当前key的size>设定 size 不执行存入
        2.其他同步应用 不停的循环 缓存数据到中间表,利用 redis 获取每个缓存任务的key 的 value,根据 value 来动态设置当前业务的数据源 ,并执行.

mybatis
    很多项目都用到了
    优化 + 增删改查

java 解决方案

springboot 多数据源 动态切换(Mybatis)
    项目名称:
        测试管理平台项目(2019):简称B
    项目业务:
        1.每天每隔两小时同步 前后半个月的 app A 的数据库到自己的服务器上,主从分离,只用来查询 
    项目业务:
        1.每天每隔两小时同步 前后半个月的 app A 的数据库到自己的服务器上,主从分离,只用来查询 缓解 app A的压力
        2.B项目 同步过来的数据根据数据的版本 分库多数据源存放(放在一起数据流过大)
        3.B项目 采用分布式异步同步,即同一个应用服务器部署多个B项目同时走缓存任务
        4.缓存时需要根据 redis取到的key值进行 动态切换数据源
    使用:
        1.yml配置多数据源
        2.新建一个继承 AbstractRoutingDataSource 类的动态数据实现类DynamicDataSourceImpl,            
          这个类是通过key获取数据源的,我们重写获取key的determineCurrentLookupKey()方法
        3.新建一个DynamicDatasourceContext动态数据源上下文,里面有ThreadLocal
        4.新建MybatisConfig配置类
            实例化yml里的数据源(bean),
            实例化 DynamicDataSourceImpl类设置默认数据源和 多数据源map集合(一并设置到DynamicDatasourceContext)
            实例化 SqlSessionFactoryBean,设置实体类和mapper扫描路径,并设置数据源为DynamicDataSourceImpl
    切换:
        通过上下文切换 
            1.DynamicDatasourceContext将 数据源key值 放进 ThreadLocal 对象
            2.执行查询语句,dao层调用 sqlSessionFactoryBean创建 Connection连接。
            3.sqlSessionFactoryBean里的数据源是 DynamicDataSourceImpl,调用determineCurrentLookupKey方法根据key获取数据源
            4.determineCurrentLookupKey方法被我重写了调用:DynamicDatasourceContext.getDataSourceKey()获取
            5.上面方法一对象为 ThreadLocal为 key 从当前线程的map获取到数据源key,DynamicDataSourceImpl就会加载该数据源
        通过切面获取:
            切面逻辑里通过上下文获取

前台页面显示解析进度:
    思路是前台发送解析请求的同时,每隔1s发送另一个请求去请求解析进度值并返回给前端插件,
    问题在于如何确保这个解析进度值是我要的,因为springMVC的controller默认是单例,
    一开始想用单例模式或者加个静态常量来解决,不过这肯定是不行的,多用户同时解析进度就乱了,后来决定将解析进度值存在session里。(聊聊单例,session)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值