写在前面为什么单独列出来这个问题呢?是因为其他问题网上都有很多类似的示例和解决方法,比如Cygwin 版本不对,包不对等等,这些我就不再写了。
c编译器找不到的问题花了我很多时间去找资料,功夫不负有心人,让我找到了结局方法,所以写下来记录。
问题按照之前的流程安装好所必需的环境:cygwin 、VS2010、freeType 2.7后,开始对openJDK进行编译。
12cd /cygdrive/c/openJDK8/jdk8ubash ./configure --with-freetype=/cygdrive/c/openJDK8/freetype-2.10.1 --with-boot...
安装openJDK下载官方下载地址:http://jdk.java.net/java-se-ri/8
freeType
freeType最好下载已经编译好的,下载后解压至和openJDK同一目录下
下载地址:https://codeload.github.com/ubawurinna/freetype-windows-binaries/zip/master
Visual Studio 2010 Compliers安装
根据指导手册,OpenJDK Windows构建需要VS2010专业版编译器。编译器以及其它工具的安装位置希望由变量VS100COMNTOOLS定义,这个会由Mic...
写在前面最近在学习JVM,就接触到JDK的源码,传统的ORACLEJDK也就是JDK没有被开源,而OpenJDK是JDK的开放源码版本,以GPL协议的形式发布,适用于商业和个人。
准备openJDK编译环境,第一步就是要去安装个CYGWIN,用来在windows下模拟linux运行环境。
JDK和OpenJDK的区别,可以归纳为以下几点:
授权协议的不同:
OpenJDK采用GPL V2协议发布,而JDK则采用JRL协议发布。两个协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。
OpenJDK只包含最精简的JDK:
Ope...
写在前面java生态中有很多对http封装的组件,比如原生的 HttpURLConnection 或者apache的 HTTPClient、spring cloud中的RestTemplate和Feign等。
其中:
HttpURLConnection 和HttpClient:代码复杂,还得操心资源回收等。代码很复杂,冗余代码多,不建议直接使用。
RestTemplate和Feign主要是访问restful服务,其他非restful会很复杂。
所以项目中对于非restful服务,使用了okhttp,OkHttp是一款优秀的HTTP框架,它支持get请求和post请求,支持基于Ht...
写在前面最近开始尝试使用lambda表达式,使用起来感觉代码写起来速度快了很多,也整洁了不少。但是lambda表达式也有多坑,比如隐晦难懂,debug困难等等。今天就遇到了一个问题:lambda无法抛出受检查异常。
正文
场景
我们都知道java异常分为:受检查异常(Checked Exception)跟非受检异常(UnChecked Exception)
受检异常表示代码中必须显示的处理该异常,比如try-catch或者在方法声明上加入throws关键字把异常向上抛出。
非受检异常也被称作运行时异常,就像我们常用的RuntimeException,表示代码中可以不进行处理,直白点说就是...
写在前面之为什么要写测试用例
可以避免测试点的遗漏,为了更好的进行测试,可以提高测试效率
可以自动测试,可以在项目打包前进行测试校验
可以及时发现因为修改代码导致新的问题的出现,并及时解决
这是TDD中最重要的一环。
正文在springboot中引入springboot-test需要以下几个步骤:
pom中引入 spring-boot-starter-test
如果需要打包是不运行test,则可以再pom中加入如下配置
12345678<!--打包跳过测试--><plugin> <groupId>org.apache.maven.pl...
示例zuul作为springcloud的网关使用路由功能是,会默认把路由的前缀去掉
比如路由前:http://127.0.0.1:8181/api/demo/list
路由后为: http://192.168.1.100:8080/demo/list
如果我们需要让他不去掉api这个前缀,那么需要在对应路由上加上该属性: strip-prefix: false
源码解析首先我们从最开始加载zuul说起
@EnableZuulProxy
最开始的配置日入口是这里
123456EnableCircuitBreaker@Target({ElementType.TYPE}...
写在前面 随着项目越来越庞大,MVC的传统web架构已经出现了弊端,就算是分了微服务,项目中的各个模块间也不可避免的出现了各种复杂的关系与调用,可能改动一个小地方,将会牵一发而动全身。
所以公司开始大力推广DDD领域模型设计,经过几天的学习和上手,自己简单的根据mybatis-generator写了个可以生成关于javaWeb的DDD模型的工具类(并且可以轻松切换生成代码的type,MVC或者DDD)
正文代码地址为: https://github.com/styyt/mybatis-generator-plus-ddd
生成的结构大致为:
模型服务内调用过程为:
...
背景最近将项目切换到IDEA上,SpringBoot启动报如下错误:
经过长时间分析和排查,终于解决了此问题。
解决思路和过程首先看到报错信息指的是jmx连接失败,自己猜测可能有以下几种可能
jmx服务没有启动
IDEA配置有问题
IDEA用java发送的请求被防火墙或者其他安全设备阻拦
那么依次进行问题排查
把程序搬到eclipse,启动本应用,发现可以正常启动,so排除了第一种可能
在IDEA上用mvn package打包成jar包,然后再手动启动该jar包
发现可以正常启动,so排除第二种可能
使用管理员身份运行IDEA
再重新启动
成功了!果然是因为权限的问题!...
上一篇文章我们从volatile第一个特性浅析了JMM(JVM内存模型)及其在JVM中的实现,这篇文章我们从其第二个特性继续深入分析JVM的内存模型,当然本文依然假设大家已经了解了java基础知识和JVM的内存结构。
先来回忆下的volatile的第二个特性
1屏蔽指令重排序:指令重排序是编译器和处理器为了高效对程序进行优化的手段,它只能保证程序执行的结果时正确的,但是无法保证程序的操作顺序与代码顺序一致。这在单线程中不会构成问题,但是在多线程中就会出现问题。非常经典的例子是在单例方法中同时对字段加入volatile,就是为了防止指令重排序。
示例代码老规矩,先上代码,这次还是拿单例模...