2016年工作中遇到的問題11-20
阿新 • • 發佈:2019-01-05
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內容如下:
參考資料: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集合。而另外一個卻會報錯,只能把集合序列化,再儲存。
序列化方式有很多種,這個地方用的是“json序列化”。
17.Nginx配置負債均衡。
之前,只親自配置過動靜分離,域名對映。
最近,看了下專案中和網上的負載均衡配置,挺簡單的。
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的配置,就好了。
真是坑,花了幾個小時才搞定。
@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的配置,就好了。
真是坑,花了幾個小時才搞定。