您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Java开发技术总结
UDATA产品及JAVA开发心得2018/5/22向永清UDATA技术架构UDATA后续工作任务调度系统取代CRONTAB自助报表系统万花筒KylinAd-hoc即席查询HiveImpala、Presto、SparkSQLJAVA-WEB技术体系开发框架:Spring-boot数据访问基础:JDBC&JdbcTemplateJPA(ORM):JAVAPersistenceAPI(Hibernate)实时调度:Quartz接口访问:RestController项目管理:Maven,私有maven仓库其他:AOP,注解,Filter,SSO(CAS),ServletJAVA开发坑-1:整数比较基础:比较引用用==,比较数值用equals方法示例•Integera=123;•Integerb=123;•Integerc=newInteger(123);•(a==b)?true•(b==c)?false•Integere=1000;Integerf=1000;•(e==f)?false自动装箱缓存:•默认:-128~127•-XX:AutoBoxCacheMax=300JAVA开发坑-2:空引用null引起的不直接使用引用,而是使用函数,比如:•使用String.valueOf(a)•而不使用a.toString();//容易引起空指针异常函数形参中有引用类型变量时,一定要先判断空引用再使用。•voiddoSomething(Stringa,Stringb){•if(a==null||b==null)•return;}JAVA开发坑-3:pomjar包版本冲突通过maven自带的工具:mvndependency:tree–Dverbose通过里面的信息可以看到两个jar都commons-logging存在依赖,但是版本不同。里面的详细信息显示引用了commons-logging:commons-logging:jar:1.1去掉了commons-logging:commons-logging:jar:1.0.3(omittedforduplicate)JAVA开发坑-4:@Around切面注解使用前提条件•@Component//没有导致切面不能正产工作@Aspect•@Around切面可以拦截函数返回值publicObjectdoAround(ProceedingJoinPointpjp)throwsThrowable{Objectobject=pjp.proceed();returnobject;//正常返回}JAVA开发坑-5:减少SQL访问改进前:比如通过uid获取用户权限,以前是先获取用户,然后获取用户对应角色,最后循环获取每个角色的权限。改进后:自定义查询,一条SQL获取用户所有权限,性能能够提升3倍以上。@Query(value=select*fromprivilegewhereidin(selectprivilege_idfromrole_privilegeWHERErole_idin(selectrole_idfromaccount_roleleftjoinroleonaccount_role.role_id=role.idwhereaccount_idin(selectidfromaccountwhereuid=:uidandstatus=1)androle.status=1)andprivilege.status=1),nativeQuery=true)ListPrivilegeDOfindByUid(@Param(uid)Stringuid);JAVA开发坑-6:组合索引组合索引生效原则:从左到右依次匹配•为where,orderby,groupby后字段建立合适索引•对用and连接的多个条件建立组合索引•使用数据量少的列和字符串前缀来建立索引•使用explain来分析索引的优劣•在区分度高的列上建立索引JAVA开发坑-7:IDEAJVM优化IDEA默认的堆内存最大值和初始值都为128M,如果需要跑一些大数据集,显得很吃力。优化设置如下:•-Xms4096m初始值•-Xmx4096m最大值•优化后运行效率提高10多倍。JAVA开发坑-8:权限管理权限管理设置,标准的账户、角色、权限以及关联表设计,存在问题:•权限粒度设置过细,不方便使用•部门接口运行速度慢•使用自定义注解进行数据权限验证•权限接口尚待完善JAVA开发坑-9:多进程争夺资源控制哨兵双机热部署,两个进程同时写数据库?•防止写入重复的脏数据•设置一张status表,记录当前写进程状态•select…forupdate行锁•谁抢到锁,谁拥有运行的权利10.188.32.710.188.32.810.188.32.8JAVA开发坑-10:NS&Log&RALNS,命名服务,当前未上线Log•基于Logback,已经上线RAL•基于AOP•DBRal•HttpRaldependencygroupIdcom.sf.arch/groupIdartifactIdcommons-logging/artifactIdversion1.1.0-SNAPSHOT/version/dependencydependencygroupIdcom.sf.arch/groupIdartifactIdsftc-arch-data-ral/artifactIdversion1.0.0-SNAPSHOT/version/dependencyTHANKYOU2020/2/9
本文标题:Java开发技术总结
链接地址:https://www.777doc.com/doc-3613508 .html