1、previously initiated loading for a different type with name "javax/servlet/ServletContext"
錯誤總結:網上查了下,說是jar包沖突,還有說是servlet-api沒有被顯示引入,需要排除的。由于三個項目搞到一起,沖突肯定是有的,去掉所有的沖突后還是沒有解決問題,隨手ctrl+shift+t 搜了一下ServletContext,發現這玩意兒在servlet-api中有,在selenium-server-standalone里也有,于是查了半天,確實有個模塊下有selenium-server-standalone,想要exclude,發現沒效果,selenium-server-standalone的pom文件中顯示沒有引用任何包,放棄了。想著那就不引用這個模塊了吧,后來發現是可以的。
除了selenium-server-standalone,selenium-java,slf4j-jcl 中都有依賴commons-logging,commons-logging又會依賴servlet-api,好吧,能排除的都排除了。
2、spring的bean容器中找不到某個bean
這次的原因是三個項目整合后,使用了3個spring配置文件,其中兩個項目用代碼加載配置文件,一個項目是web項目,用web.xml加載配置文件。不管用什么方法都需要同時加載三個文件,由于三個項目既需要同時運行,也有單獨運行的,所有加載那塊不能寫死了,只能用通配符。
網上找到的資料
classpath: 只能加載一個配置文件,如果配置了多個,則只加載第一個
classpath*: 可以加載多個配置文件,如果有多個配置文件,就用這個
于是我的問題就解決啦,
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/spring/.xml");
參考:http://heisetoufa.iteye.com/blog/1671306
4、Cannot instantiate class XXX.TestLoginPremium
spring配置文件不見了
5、java.lang.ClassNotFoundException: org.testng.TestNG
testng classpath設置有問題,找不到testng的包
6、mybatis模糊查詢報錯
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'xxx' in...
List<Eiinterface> interfaceList = eiinterfaceDao.findByAddress(oldIp);
<select id="findByAddress" parameterType="java.lang.String" resultMap="BaseResultMap">
SELECT * FROM eiinterface where interfaceaddress like '%${oldIp}%'
</select>
解決辦法:
(1) 將string類型換成map類型的,然后將該keyword 放入該map中,不會報錯
(2) 在配置文件中直接將keyword換成_parameter
<select id="findByAddress" parameterType="java.lang.String" resultMap="BaseResultMap">
SELECT * FROM eiinterface where interfaceaddress like '%${_parameter}%'
</select>
7、mybatis批量插入clob內容過大報錯
ORA-01461-僅能綁定要插入LONG列的LONG值
之前的批量插入式這么寫的
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO sterrorlog (errorlogid, resultlogid, errorname, stacktrace,errorstate,errordata,errormsg)
<foreach collection="list" item="errorlog" index="index" separator="union all" open="(" close=")">
SELECT #{errorlog.errorlogid},
#{errorlog.resultlogid},
#{errorlog.errorname},
#{errorlog.stacktrace},
#{errorlog.errorstate},
#{errorlog.errordata},
#{errorlog.errormsg} FROM DUAL
</foreach>
</insert>
其中stacktrace和errormsg是Clob類型的,有可能問題是出現在當從dual中取數據時,會將clob對象的字段轉為Long型
于是找到了Begin和end語法
<insert id="insertBatch" parameterType="java.util.List">
begin
<foreach collection="list" item="errorlog" index="index" separator=";">
insert into sterrorlog(errorlogid, resultlogid, errorname, stacktrace,errorstate,errordata,errormsg,pid,configmethodflag)
values( #{errorlog.errorlogid}, #{errorlog.resultlogid}, #{errorlog.errorname}, #{errorlog.stacktrace}, #{errorlog.errorstate},
#{errorlog.errordata}, #{errorlog.errormsg}, #{errorlog.pid}, #{errorlog.configmethodflag})
</foreach>
;end;
</insert>
8、mybatis插入java.util.Date到oracle java.sql.Date類型中日期沒有時分秒
mybatis generator生成代碼默認jdbcType為Date類型,改成TIMESTAMP類型就好了。resultMap和insert插入語句中都需要修改。
排除法是個找錯的好方法