2016年工作中遇到的問題11-20

小雷FansUnion發表於2016-04-22
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的配置,就好了。

真是坑,花了幾個小時才搞定。

相關文章