2016年工作中遇到的问题11-20

来源:互联网 发布:地图慧软件下载 编辑:程序博客网 时间:2024/04/28 00:06
11.SpringMVC的PathVariable。
@PathVariable("id") Integer id;
@RequestParam Integer id;


使用了“路径变量”,同时要求它不为空,就使用了
@RequestParam @PathVariable("id") Integer id;
访问 /1001 ,结果提示id总是找不到。


使用了@PathVariable,不应该再同时使用@RequestParam。


12.阿里云的OSS删除图片。


删除之前,Chrome浏览器能正常下载图片。删除之后,Chrome还可以继续下载。


去阿里云控制台确认,已经删除了。


用QQ浏览器打开图片,被拒绝。


这说明图片已经删除成功了。


Chrome可以继续下载,很可能是“浏览器缓存”。


13.JSTL的if表达式。
sendId在Java中是String类型,数据库中是varchar。
这种写法,在Jetty下运行从来没有报错,在Tomcat下,突然就报错了,之前没问题。
<td><c:if test="${message.sendId==-1}">系统</c:if>


严谨的写法,字符串比较用''括起来。
<td><c:if test="${message.sendId=='-1'}">系统</c:if><c:if test="${message.sendId!='-1'}">${message.sendMember.mobile}</c:if></td>


14.maven如何将项目引用的所有jar包复制到lib文件夹内。
Maven的非web项目在执行时需要引用很多jar包,这时候通常的做法是将这些jar包统一放到lib目录中,maven的dependency插件可以帮我们做这件事情。


我们需要在pom文件的build节点的plugins节点内添加一个plugin,plugin内容如下:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><mainClass>MainClass</mainClass><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix></manifest><manifestEntries><Class-Path>.</Class-Path></manifestEntries></archive></configuration></plugin><plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-dependency-plugin</artifactId>            <executions>                <execution>                    <id>copy-dependencies</id>                    <phase>prepare-package</phase>                    <goals>                        <goal>copy-dependencies</goal>                    </goals>                    <configuration>                        <outputDirectory>E:\MavenRepository\0.0.1-SNAPSHOT\lib</outputDirectory>                        <overWriteReleases>false</overWriteReleases>                        <overWriteSnapshots>false</overWriteSnapshots>                        <overWriteIfNewer>true</overWriteIfNewer>                    </configuration>                </execution>            </executions>        </plugin></build>




参考资料:http://outofmemory.cn/maven/FAQ/how-to-copy-dependency-to-lib-folder


15.Redis的几个问题。
Redis缓存对象,需要序列化。
public class OssItem implements Serializable。
如果没有实现Serializable,会报错。




public class OssItem extends BaseOssItem implements Serializable。
放到缓存前,list集合OssItem元素的属性都有值,属性都是从父类BaseOssItem继承来的。
但是,当从Redis取出的时候,list集合有值,但每个元素的属性都是空的。


后来,把父类BaseOssItem的属性,都手动定义放到OssItem下就可以了。
public class OssItem  implements Serializable{
   private String name;
   ...



16.Redis缓存集合类型。
2个项目,都使用了SpringDataRedis,但是配置方式不一样。
org.springframework.data.redis.core.StringRedisTemplate


其中1个,可以直接存放list集合。而另外一个却会报错,只能把集合序列化,再存储。
public void add(String key,List<ResourceMatchContent> list){String json = JSONObject.toJSONString(list);logger.info("save ResourceMatch ,json=" + json+",key="+key);defaultCache.add(key, json, CATCHE_TIME);}


序列化方式有很多种,这个地方用的是“json序列化”。


17.Nginx配置负债均衡。
之前,只亲自配置过动静分离,域名映射。
最近,看了下项目中和网上的负载均衡配置,挺简单的。
upstream jieli.com {         server 127.0.0.1:8080;          #server 192.168.8.203:8080;    }server{          listen 80;          server_name erp.zh-jieli.com;          location / {              index index; #默认主页为 /index              #proxy_pass http://jieli;          }}


 
18.Solr数据不同步。
  Solr4中,用了SolrCloud分布式服务,出现了数据不一致的情况,原因未知。
  改成了Solr5,没有这个问题。

19.java.lang.NullPointerException错误
spring运行的时候出现了:


java.lang.NullPointerException
    at org.springframework.core.SerializableTypeWrapper$TypeProxyInvocationHandler.invoke(SerializableTypeWrapper.java:239)
    at org.springframework.core.$Proxy5.hashCode(Unknown Source)
问题原因:spring的jar包冲突


自己的项目,dubbo中有个spring2.5,又配置了spring4.x,调整下顺序就好了。

参考资料:http://zhidao.baidu.com/link?url=KyfXakvRF7skwyJ8MLU_8x3qNThYbx2r478bi1ynQ1xrni6cWyki7PeQ_LkR3eJldPvRd_EbFsDrN3dGCbbP-RkjE5m5tLd00r5vaNTp_BO


20.SpringJUnit4ClassRunner.runLeaf方法找不到。
java.lang.NoSuchMethodError: org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runLeaf(Lorg/junit/runners/model/Statement;Lorg/junit/runner/Description;Lorg/junit/runner/notification/RunNotifier;)V
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:217)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)


问题原因:
Spring版本
 spring用3.x 不报错。<spring.version>3.2.3.RELEASE</spring.version>
 
 spring用4.x报错。<spring.version>4.1.4.RELEASE</spring.version>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>

最终结果:项目中有很多地方pom.xml都配置junit,各种版本。
最后,只留一个4.10的配置,就好了。

真是坑,花了几个小时才搞定。
0 0
原创粉丝点击