
JAVA
文章平均质量分 51
hello1huan
全栈工程师,主业后端,副业前端,兼职运维,欢迎关注!
展开
-
基于OkHttp自定义拦截器实现外部服务多地址配置且请求失败自动切换地址
最近在业务中接入了一个第三方的接口,第三方为了提高服务的可用性提供了多个地址供外部服务调用,所以需要实现在请求某一个地址不可用时自动切换到另一个地址并重试的功能。由于业务中使用 OkHttp,所以直接用 OkHttp 的自定义拦截器实现。1.在 application.properties 中配置外部服务地址,多个地址用英文半角逗号隔开xxx.api.addr=http://www.baidu...原创 2020-01-12 11:52:18 · 1023 阅读 · 0 评论 -
spring-data-mongo 聚合分析时的条件操作($cond)
exampleimport static org.springframework.data.mongodb.core.aggregation.Aggregation.*;import static org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Cond.*;import org.springfra...原创 2019-08-11 00:30:31 · 1839 阅读 · 0 评论 -
Gradle 项目添加外部依赖 jar 包
1.在项目根目录下创建 libs 文件夹2.将 xxx-common-1.0.0.jar 包拷贝到 libs 文件夹下3.编辑 build.gradle文件repositories { flatDir{ dirs 'libs'}}dependencies { compile "com.xxx.blm:xxx-common:1.0.0"}4.刷新 gradle project...原创 2019-08-11 00:29:14 · 9403 阅读 · 0 评论 -
Gradle 添加 JVM 程序启动参数
1.添加插件apply plugin: 'application'mainClassName = "com.rapid.develop.core.server.ApplicationServer"2.使用 Application 插件设置 JVM 参数applicationDefaultJvmArgs = [ '-Dapp.home=MY_APP_HOME', ...原创 2019-08-11 00:28:07 · 8591 阅读 · 0 评论 -
Gradle 打包跳过 test
gradle 打包时跳过 test在 build.gradle 文件的 buildscript 代码块中添加如下代码: //skip Test tasks gradle.taskGraph.whenReady { tasks.each { task -> if (task.name.contains("test")) ...原创 2019-08-11 00:16:27 · 4196 阅读 · 2 评论 -
Mybatis踩坑第八弹-运行原理之SqlSessionFactory
大家在学会了如何使用 Mybatis 之后,有没有这样一个疑问——Mybatis 的运行原理到底怎么样的?在看不见的底层,它是如何实现执行增删改查工作的呢?通常情况下,使用 Mybatis 会有四个步骤:(1)获取 SqlSessionFactory,(2)通过 SqlSessionFactory 获取 SqlSession,(3)通过 SqlSession 获取 数据对象的 Mapper 代理...原创 2018-10-09 21:03:41 · 893 阅读 · 0 评论 -
spring 相关 jar 包的正确下载姿势
打开百度,输入关键字 spring;点击具有官网标识的 Spring 链接进入官网在官网界面点击导航栏上的 Project选中并点击第二个 spring framework点击图标,进入 spring 的 github 页面将页面拉到下方,点击链接访问 spring 项目的二进制文件地址将页面拉到下方,点击链接访问仓库地址点击左侧导航栏中的 Artifacts 栏在 A...原创 2018-10-12 11:57:59 · 208 阅读 · 0 评论 -
Mybatis 踩坑第六弹—缓存
Mybatis 支持两级缓存,分别是一级缓存(session 级别,又称本地缓存)和二级缓存(namespace 级别,又称全局缓存); 其中一级缓存默认开启,在于数据库相同的会话期间查询到的数据会放在本地缓存,之后再查询相同的数据会直接从本地缓存中取;但在四种情况下,一级缓存会失效:1、使用不同的会话请求相同的数据;2、使用相同的会话,请求不同的数据;3、使用相同的会话,在请...原创 2018-09-22 01:17:23 · 1228 阅读 · 0 评论 -
Mybatis踩坑第五弹—DynamicSQL
MyBatis 中用于动态SQL的标签包括 if、where 、choose、trim、foreach、bind、sql,下面来分别说明一下。if 标签可以通过判断传入的值来确定查询条件,其中 test 指定一个OGNL表达式,Mybatis 会根据表达式的值决定是否使用标签体内的查询条件,但是,在某些情况下,只是用 if 标签会出现 SQL 拼装的问题,比如多出来 and 或者 or,通...原创 2018-09-21 01:49:56 · 4632 阅读 · 0 评论 -
Mybatis踩坑第七弹-MBG逆向工程
经常使用 Mybatis 的同学都知道,通常在使用的时候只需要手动配置一个全局的 XML 配置文件即可,而 javaBean、dao 接口、mapper 映射等文件通常采用逆向工程的方式来自动生成,这样大大节省了时间,同时避免了手写配置文件中容易错写、漏写的东西。 大致说一下使用 Mybatis 逆向工程的流程: 首先,在 GitHub 的 Mybatis 顶级项目下找到 gene...原创 2018-09-26 00:01:46 · 249 阅读 · 0 评论 -
Mybatis学习第四弹
今天主要谈谈 Mybatis 中对查询的结果集封装规则的学习。通常来说,对于 POJO 我们只需要使用 resultMap 标签对查询的结果集进行封装简单即可,使用 id 子标签封装主键查询结果,使用 result 子标签封装其他列查询结果,使用 result 封装主键,但是不推荐这样做,因为id 子标签对主键的封装会进行底层优化;其中,使用 column 属性指定查询的列名,使用prop...原创 2018-09-19 22:29:57 · 211 阅读 · 0 评论 -
Mybatis学习第三弹
今天正好学到#{}和${}取值,想到之前面试的时候面试官问 Mybatis 里面的占位符是什么,自己傻傻地说了一个 % ,希望你看完以后不要再犯跟我一样的错误了1、#{} 是Mybatia 中的占位符,它是以预编译(PrepareStatement)的形式,将参数用特定值(“?”)设置到SQL语句中,同时能有效的防止SQL注入;2、${} 是Mybatis中的拼接符,采用直接将取出的值拼装...原创 2018-09-19 22:29:00 · 243 阅读 · 0 评论 -
Mybatis学习第二弹
今天主要学习了Mybatis中关系映射文件的编写,其中主要包括增删改查SQL语句的编写。在通过Mybatis进行接口化编程时,我们只需要定义相应的接口以及接口方法,然后编写与之对应的映射文件,即可采用接口调用的方式轻松的进行对数据库的操作。映射文件以 <mapper> 标签开始,指定namespace 为对应的 DAO 接口类的全类名,然后在该标签内,可以使用<select&...原创 2018-09-19 22:26:11 · 211 阅读 · 0 评论 -
详解Java设计模式中的生产-消费者模式及代码实现
最近有网友面试中遇到了,生产者 消费者问题。我在这里整理一下,分享出来。对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。对于此模型,应该明确一下几点:生产者仅仅在仓储未满时候生产,仓满则停止生产。消费者仅仅在仓储有产品时候才能消费,仓空则等待。当消费者发现仓储没产转载 2016-10-24 16:26:51 · 246 阅读 · 0 评论