显示标签为“Java”的博文。显示所有博文
显示标签为“Java”的博文。显示所有博文

2020年10月19日星期一

@Transactional导致的问题

 https://groups.google.com/g/mybatis-user/c/cat2sbCD3rI?pli=1

spring项目中使用了@Transactional,导致了insert语句执行完之后,无法select查询到结果。需要将insert和select分开成两个事务才能解决。

2019年11月8日星期五

gson序列化变成unicode编码的问题

gson序列化默认会把<和>变成unicode的编码,在new GsonBuilder()之后需要调用disableHtmlEscaping(),禁止转义html标签。参考https://stackoverflow.com/questions/4147012/can-you-avoid-gson-converting-and-into-unicode-escape-sequences

2019年11月7日星期四

记录一个logback奇怪的问题

我在logback中设置了两个appender,一个是console,另一个是file。root的loglevel是INFO,由于INFO级别的日志很多,所以我想将console中log的级别提升为WARN(docker中处理特别多的console log会极大拖慢机器速度),所以在console log的配置中增加了:
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>WARN</level>
    </filter>

设置console的loglever变成了WARN,只有WANR及以上的日志才回输出到console。文件日志还是INFO及以上的日志。加完后有一个新的问题,日志中行号都变成了问号。

解决:在AsyncAppender的配置项里增加 <includeCallerData>true</includeCallerData> 即可。


2019年6月27日星期四

docker写日志导致压测过程中耗时严重问题

今天在用ab做服务的压测,发现用java直接启动,并发数为1、2、3差不多(30ms以内),并发数加到4、5之后性能才有一定下降(50~60ms)。用docker启动服务,并发请求数为1、2、3、4、5时,每次递增时延都有增加,从50ms一直升到了150ms。docker启动的服务性能远差于java直接启动的服务。
检查发现因为我的服务写日志比较多,docker会写/var/lib/docker/containers/container_id/xxx.json这个json格式的日志文件,加上原来java自己的日志文件,写了双份,同时docker会把日志转为json格式。这一过程特别消耗资源。
测试结果显示,关闭log后,并发数为5时,p95的性能直接降到了4ms,效果惊人。

补充:原来设置了两个日志,一个是同步的console日志,一个是异步的文件日志。docker会收集命令行的日志作为自己的日志存成json文件的log。试了下,关了console的日志,保留文件日志,就没有影响了。

2019年4月16日星期二

java读取resources文件遇到的一个问题

spring中用applicationContext.getResources获取到Resource类实例之后,因为打包为jar之后resource文件在jar中,不在文件系统中,通过resource.getURI().getPath()为null,可以通过resource.getURL().getPath()获取到路径,比如:file:/Users/chenxiaoyu/project/target/project-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/data/xx.txt

2016年11月3日星期四

eclipse中导入java web项目问题汇总

1、import javax.servlet.http错误

参考http://yl-fighting.iteye.com/blog/1409468

在这之前需要已经有安装tomcat,下载解压好tomcat后参考http://www.cnblogs.com/marineoxy/p/5084382.html

2、查看markers发现Target runtime Apache Tomcat 7.0 is not defined

我配置的是tomcat 8.0,修改了项目文件夹中.settings/org.eclipse.wst.common.project.facet.core.xml

3、Build path specifies execution environment JavaSE-1.7. There are no JREs installed in the workspace that are strictly compatible with this environment.

参考http://stackoverflow.com/questions/3138384/warning-build-path-specifies-execution-environment-j2se-1-4

4、Implementation of project facet jst.web.jstl could not be found. Functionality will be limited.

由于MyEclipse里的用到了jstl,导入到Eclipse里也带过来了,修改.settings/org.eclipse.wst.common.project.facet.core.xml,删除jst.web.jstl这行

5、运行时Context initialization failed

[ERROR] - org.springframework.web.context.ContextLoader -ContextLoader.java(307) -Context initialization failed
  org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [/Users/chenxiaoyu/Documents/Toolkit/apache-tomcat-8.0.38/webapps/meathub_data/WEB-INF/classes/com/zhaorou/action/ProductController.class]; nested exception is java.lang.IllegalArgumentException

我导入的项目是用spring 3,但我用的是java 1.8,版本不兼容,要么升级为spring 4,要么降级为java 1.7

2016年7月5日星期二

jetty调试和部署web项目

本地调试:
<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.3.10.v20160621</version>
  <configuration>
    <httpConnector>
      <port>8081</port>
    </httpConnector>
    <stopPort>9966</stopPort>
    <stopKey>foo</stopKey>
  </configuration>
</plugin>

配置参考:https://www.eclipse.org/jetty/documentation/9.3.x/jetty-maven-plugin.html#jetty-stop-goal
jetty插件版本:http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.eclipse.jetty%22%20AND%20a%3A%22jetty-maven-plugin%22

mvn jetty:run

部署:
java -jar start-server.jar xxx port  // xxx为war包名

2016年6月16日星期四

JDK8下maven使用maven-javadoc-plugin插件报错

参考:http://blog.csdn.net/thc1987/article/details/51314777

解决办法:
添加-Xdoclint:none配置
完整配置如下:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.9</version>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <additionalparam>-Xdoclint:none</additionalparam>
            </configuration>
        </execution>
    </executions>
</plugin>

2016年5月4日星期三

Windows中设置Java的默认字符集为UTF-8

Java中有出现中文乱码的情况,使用System.out.println(System.getProperty("file.encoding"));查看了系统的文件编码为GBK,将该变量的值设为UTF-8便可以解决问题。

可以在运行程序的时候指定编码,用-Dfile.encoding=UTF-8参数即可。

或者根据Java官方文档http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.html#tooloptions在系统环境变量中增加一个变量,变量名为: JAVA_TOOL_OPTIONS, 变量值为:-Dfile.encoding=UTF-8,保存,重新打开ide运行,问题解决。