2013年工做中遇到的20個問題:121-140

 
121.Springz中,根據實現類找不到bean。
   UserImpl implements User{
  
   }
  
    XmlWebApplicationContext context;
    context.getBean(User.class);√
 context.getBean(UserImpl.class);獲取不到
 
 沒有使用Cgilib庫!
 
 --------貌似也不行------------
 由於spring的bean都是作了包裹的。因此你用 ServiceImpl 創建了一個bean,實際上他是新建了一個相似於 ServiceImplWrapper的繼承 Service的接口的類來封裝的,這樣才能作到AOP的效果。
    因此新建的Bean,其實是Spring新建的那個類型的,而不是ServiceImpl類型。所以只能用 Service接口尋找。
 
 但若是使用cglib的話,包裹類是直接繼承ServiceImpl的,所以就能夠找到了。
 --------------------
 按照類型找bean好像有專門的配置。 先看看文檔吧。--------------------
 
 綜上所述,目前沒有找到緣由。css


122.SpringMVC 使用實體類User{Date date}不能接收「2013-7-24」這樣的日期,
類型轉換會失敗。只能使用String接收,手動進行類型轉換。前端

像 2013-09-31 這種字符串 把它parse爲日期的時候,parse成 2013-10-01比較好,仍是拋異常比較好?
simpledateformat 會將它parse成2013-10-01java

public static Date parseDate(String date) {
  if(StringUtils.isEmpty(date)){
   return null;
  }
  
  SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-HH");
  Date d = null;
  try {
   d = format.parse(date);
  } catch (ParseException e) {
   e.printStackTrace();
  }
  return d;
 }mysql


123.
按名稱搜索,須要使用 like '%aa%',而aa是Mybatis動態得到的。linux

##不對
<select id="searchBrand" parameterType="string" resultType="Integer">
  select id from organization where englishName like '%#{agencyName}%'
  and orgTypeId = 50004
 </select>
 
##官方例子,bind不識別,多是 Mybatis新增的
<select id="selectBlogsLike" parameterType="Blog" resultType="Blog">
  <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
  SELECT * FROM BLOG
  WHERE title LIKE #{pattern}
</select>web

只能在Java中設置了,agencyName="%"+agencyName+"%";spring

124.界面自適應寬度
大屏幕,普通筆記本 sql

3個大屏幕合成1個超級大的「虛屛」數據庫

125.ssh 配置
我想經過Windows的Putty,配置ssh key來訪問遠程主機,沒有配好。
最後,實在Linux下配了個,而後訪問的。json

126. 防火牆
Java經過 http鏈接 linux C++程序,失敗。
防火牆 屏蔽了 端口。

127. 上傳圖片
我在使用阿里雲上傳,圖片的時候,老是上傳失敗,提示"失敗信息"。
連續2天都這樣,我想阿里雲的網站不可能一直出問題,因此我懷疑本身的圖片出問題了。

通過分析和判斷,最終發現 圖片太大,有2M。

這讓我想到Struts2和Spring中配置上傳文件的最大值。

128. 日誌性能
程序運行時,打印日誌會下降程序的性能麼?
把日誌級別設置爲error,info,debug,trace,對程序的性能有影響麼?

打印日誌太多了必然會下降性能啊
由於打印日誌是IO操做,因此寫程序時必定要注意好是 info仍是debug。
線上運行的通常都是info。


129.  讀取Excel文件
個人筆記本和公司的Linux服務器,讀取1個具備8個sheet的Excel文件,須要6到11s。
而公司的1個項目,須要下載這種報表,後臺數據計算就須要5到10s,客戶要求總共時間在10s。
因此,只能提升前端的效率。

最終的解決方法:在系統初始化時,預先建立N個Workbook對象,緩衝起來。
啓動1個定時器,檢查Workbook對象個數,當達到最低值時,就再建立若干個,達到最大值。

有2點說明:
1.該項目的併發量很小,只要求20個,因此預先建立N個對象,是夠用的。
空間換時間,在這種狀況下是可行的。

2.Workbook對象,每用1個,就須要刪掉。裏面的數據已經變了,不能再次使用了。


130.SpringMVC使用 Map和實體類接收參數 各有千秋。
實體類編寫比較繁瑣,好處是 接收到參數後,類型已經轉換成功了。

131.SpringMVC 處理全局異常。
@Component(提示:須要掃描這個異常所在的包)
public class OurException implements HandlerExceptionResolver {


 public ModelAndView resolveException(HttpServletRequest request,
   HttpServletResponse response, Object handler, Exception ex) {
   
 }

 也能夠經過在xml文件中註冊bean。
<bean class="××.exception.OurException">  </bean>

http://fuliang.iteye.com/blog/947191

132.嚴格按照順序 構造SQL語句。
select
from
where
group by
having
order by
limit

133.mysql字符串比較時,不區分大小寫
binary char,能夠區分大小寫
或者設置數據庫的collate。

create database FansUnion default character set utf8 collate utf8_general_ci

SELECT * FROM User WHERE loginName = #{loginName} COLLATE utf8_bin

134.檢驗一個名字等是否重複時,須要排除自身這個實體。
好比有個叫 name的用戶,修改name的時候,須要檢驗數據庫是否存在重名,
這個時候應該排除name這個用戶。

135.DateFormat setLenient
以前都沒注意過有這麼個方法,不然判斷日期格式就太不靠譜了。
又是晦澀的單詞:setLenient(false),嚴格匹配日期格式

136.json轉換
JSON字符串轉換object錯誤:MorphDynaBean cannot be cast to com.softright.bean.TestBean,類中有集合類型的屬性 由於JSONObject.toBean()把JSON字符串轉換爲一個本身定義的類,當其中屬性有相似List , Map ,ArrayList的時候,麻煩就來了。

錯誤:MorphDynaBean cannot be cast to com.softright.bean.TestBean

解決方法:
 
在JSONObject.toBean的時候
 
若是轉換的類中有集合,能夠先定義Map<String, Class> classMap = new HashMap<String, Class>();
 
在classMap中put你要轉換的類中的集合名,像:classMap.put("data", StoDataInfo.class);
 
固然也能夠put一個集合類("data",Map.class)
 
而後在toBean()的時候把參數加上, 像:ShenTongInfo stInfo=(ShenTongInfo) JSONObject.toBean(o, ShenTongInfo.class, classMap);


http://www.111cn.net/jsp/Jsp-Servlet/41930.htm

137.Mybatis 原樣輸出${status} string類型的參數,會報 no getter方法,換成Map就沒問題。

138.Spring解析${jdbc.driverClass}失敗。
Could not load driverClass ${jdbc.driverClass} java.lang.ClassNotFoundException: ${jdbc.driverClass}

在spring裏使用org.mybatis.spring.mapper.MapperScannerConfigurer 進行自動掃描的時候,設置了sqlSessionFactory 的話,可能會致使PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}這樣之類的表達式,將沒法獲取到properties文件裏的內容。 致使這一緣由是由於,MapperScannerConigurer實際是在解析加載bean定義階段的,這個時候要是設置sqlSessionFactory的話,會致使提早初始化一些類,這個時候,PropertyPlaceholderConfigurer還沒來得及替換定義中的變量,致使把表達式看成字符串複製了。 但若是不設置sqlSessionFactory 屬性的話,就必需要保證sessionFactory在spring中名稱必定要是sqlSessionFactory ,不然就沒法自動注入。又或者直接定義 MapperFactoryBean ,再或者放棄自動代理接口方式。


解決方法:Spring升級到3.1.1,Mybatis升級到3.1.1,mybatis-spring插件升級到1.1.1
使用"sqlSessionFactoryBeanName"而非"sqlSessionFactory"
 <bean name="mapperScannerConfigurer_aa" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <!--  <property name="sqlSessionFactory" ref="sqlSessionFactory_aa"/> -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_aa"/>
        <property name="basePackage" value="..." />
        <property name="markerInterface" value="..." />
    </bean>

http://www.oschina.net/question/188964_32305

139.縮小filter的過濾範圍。
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
/**
 * 縮窄OpenSessionInViewFilter的過濾範圍,請求css、js、圖片等靜態內容時不建立Session鏈接. 
 * 在web.xml中可配置excludeSuffixs參數,多個後綴名以','分割.
 * 
 */

140.SpringMVC Controller方法接收Web請求參數。
使用@RequestParam這個註解。

讓人意外的是:Integer和User等實體類,能夠不使用這個註解。
而用Map接收參數時,必須使用@RequestParam這個註解。

默認使用@RequestParam Integer id,沒有接收到id,會報錯。
@RequestParam(required=false)表示id參數是可選的。

 

相關閱讀

工做問題 http://blog.csdn.net/FansUnion/article/category/1334371

相關文章
相關標籤/搜索