記一次junit 運行錯誤調試 Failed to load ApplicationContext

任何事物的發展都不是一帆風順的,我們每個人都會經歷曲折與困難,只不過是有的人經歷的多,有的人經歷的少,或是當我們處於困難挫折時的周圍環境有所不同。

項目是之前的老項目了,最近又增加了一個新功能,想着寫個方法測試一下新增的代碼,但是在使用juint工具進行測試時,一直報Failed to load ApplicationContext這個錯誤,一開始摸不着頭腦,網上各種資料查找,都不能解決自己的問題,滿屏的錯誤日誌,一時間心煩意亂。就在自己將要放棄時,還是自己靜下心來,翻看錯誤日誌發現:

Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'maxActive'; nested exception is java.lang.NumberFormatException: For input string: "${master.maxActive}"

於是,才明白配置文件內容沒有獲取到,想到項目裏面配置了多環境參數切換,纔有瞭如下的分享。

 

框架:springmvc+mybatis

報錯內容爲:java.lang.IllegalStateException: Failed to load ApplicationContext

錯誤原因:項目配置了多環境參數切換,未指定@ActiveProfiles("dev")。導致配置文件內容讀取出錯。

junit代碼如下:

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@ActiveProfiles("dev")
@ContextConfiguration(locations = {"classpath*:spring-mybatis.xml","classpath*:spring-mvc.xml"})
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class OrgReportTaskServiceTest {
    Logger logger = LoggerFactory.getLogger(OrgReportTaskServiceTest.class);
    @Resource
    private OrgReportTaskService orgReportTaskService;
    
    @Test
    public void testDelete() {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        int result = this.orgReportTaskService.deleteByIds(list);
        logger.info("result:"+result);
        
    }
}

mybatis配置文件:

    <!-- Spring和MyBatis完美整合,不需要mybatis的配置映射文件
         **表示可以表示任意多級目錄    *表示多個任意字符
     -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-page.xml" />
        <!-- 自動掃描mapping.xml文件 -->
        <property name="mapperLocations">
            <array>
                <value>classpath*:com/beetle/**/mapping/*.xml</value>
            </array>
        </property>
    </bean>

注意:mapperLocations內容:classpath後面一定要加上*,否則的話,會報一下異常:

Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.beetle.system.mapper.SysConfigMapper.selectByPrimaryKey 

classpath和classpath*區別: 

classpath:只會到你的class路徑中查找找文件。

classpath*:不僅包含class路徑,還包括jar文件中(class路徑)進行查找。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章