SpringBoot 프로젝트 에서 발생 한 버그 문제 및 해결 방법

11091 단어 SpringBootbug
1.프로젝트 시작 시 오류 보고
1.Error starting ApplicationContext.
To display the auto-configuration report re-run your application with 'debug' enabled.
해결 방법:
yml 프로필 에 추가debug: true기본 값 은false이기 때 문 입 니 다.
2.my batis 를 통합 할 때 mapper 패키지 의 클래스 가 검색 되 지 않 았 습 니 다.
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'com.app.mapper.UserMapper' available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
해결 방법:
springboot 의 시작 클래스 에 추가@MapperScan("mapper ")또는 Mapper 류 에 직접 주석@Mapper을 추가 하거나 위 에 있 는 것 을 사용 하 는 것 을 권장 합 니 다.그렇지 않 으 면 각각mapper에 주석 을 추가 하 는 것 도 귀 찮 습 니 다.
3.데이터베이스 에 데이터 타 임 스 를 삽입 하 는 중 오류
"\r### Error updating database. Cause:
com.mysql.jdbc.MysqlDataTruncation:
Data truncation: Data too long for column 'password' at row 1\r###
데이터베이스 시트 password 이 필드 는 너무 짧 습 니 다.길 게 설정 해 야 합 니 다.

java.lang.ClassCastException: 
com.app.entity.User cannot be cast to java.lang.Integer
4.my batis 로 타 임 스 오류 조회

org.mybatis.spring.MyBatisSystemException: 
nested exception is org.apache.ibatis.binding.BindingException: 
Parameter 'user_type' not found. Available parameters are [2, 1, 0, param1, param2, param3]
원인:@Param주석 이 부족 합 니 다.하나의 매개 변수 만 있 을 때Mapper인터페이스 에서 사용 하지 않 아 도 됩 니 다.

public User getUser(String name);
여러 개의 인자 가 있 을 때 반드시 사용 해 야 한다.

public User getUser(@Param("name") String name,@Param("password") String password); 
5.Mybatis 조회 문자열 전송 매개 변수 오류

mapper  :
PkRecord findByPkStudentNumber(String pkStudentNumber);
   mapper    
<select id="findByPkStudentNumber" resultMap="recordMap" >
 SELECT * FROM pk_record
 <where>
 <if test="pkStudentNumber!=null">
 pk_student_number=#{pkStudentNumber}
 </if>
 </where>
 </select>
그리고 다음 과 같은 실 수 를 하 겠 습 니 다.
There is no getter for property named 'XXX' in 'class java.lang.String'
원인:
Mybatis 는 기본적으로 ONGL 해석 파 라 메 터 를 사용 하기 때문에 대상 트 리 형식 으로 string.num 값 을 자동 으로 가 져 와 오류 가 발생 합 니 다.
해결 방법:
mapper설정 파일 에서 매개 변수 이름 을 모두_parameter로 변경 합 니 다.

<select id="findByPkStudentNumber" resultMap="recordMap" >
 SELECT * FROM pk_record
 <where>
 <if test="_parameter!=null">
 pk_student_number=#{_parameter}
 </if>
 </where>
 </select>
mapper인터페이스 에서@Param관련 방법 으로 매개 변수 값 을 설명 한다.

PkRecord findByPkStudentNumber(@Param("pkStudentNumber") String pkStudentNumber);
6.my batis 반환 값 오류

org.apache.ibatis.binding.BindingException: 
Mapper method 'com.hoomsun.mybatis.dao.CostMapperDao.dongtaislq' 
has an unsupported return type: class java.lang.String
dao 인터페이스 클래스 에 대응 하 는 방법 으로 반환 값 을 제거 하고 void 를 사용 합 니 다.예 를 들 어:

public void dongtaislq(Map map);
7.my batis 의 집합 과 Stirng 유형의 비교
잘못된 소식 을 알리다.
invalid comparison: java.util.ArrayList and java.lang.String
이유:이 두 가지 유형 을 비교 할 수 없습니다.

<if test="categoryIds!=null and categoryIds!=' ' ">
 AND category_id IN
 <foreach collection="categoryIds" item="categoryIds" open="(" separator="," close=")">
 #{categoryIds}
 </foreach>
</if>
list 를 받 을 때 판단 list!='를 추 가 했 습 니 다.집합 과 Stirng 유형의 비 교 를 일 으 켰 기 때문에 오 류 를 보고 하고 판단 조건 을 list.size>0 으로 바 꾸 면 됩 니 다.

<if test="categoryIds!=null and categoryIds.size>0" >
 AND category_id IN
 <foreach collection="categoryIds" item="categoryIds" open="(" separator="," close=")">
 #{categoryIds}
 </foreach>
</if>
8.대상 데 이 터 를 데이터베이스 에 저장 한 후 ID 에 따라 이 대상 을 조회 하고 되 돌 릴 때 null

<insert id="saveUser" useGeneratedKeys="true" keyColumn="id" >
 insert into user(username,password,nickname) values (#{username},#{password},#{nickname})
</insert>
이렇게 쓰 면 데이터 베 이 스 를 저장 할 수 있 습 니 다.문제 없습니다.ID 도 자동 으로 증가 할 수 있 습 니 다.하지만 저장 후 바로 ID 에 따라 조회 할 때 null 로 되 돌아 갑 니 다.
해결 방법 은keyColumnkeyProperty로 바 꾸 면 됩 니 다.

<insert id="saveUser" useGeneratedKeys="true" keyProperty="id" >
 insert into user(username,password,nickname) values (#{username},#{password},#{nickname})
</insert>
9.아이디어 실행 프로젝트 오류

//       
ERROR 8760 --- [cat-startStop-1] org.apache.catalina.core.ContainerBase : A child container failed during start
//    Tomcat  
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 
Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
여기 서 문 제 는 주로 jre 환경 이 잘 선택 되 지 않 은 것 입 니 다.아마도 당신 이 이전에 프로젝트 를 바 꾸 라 고 요구 한 후에 이전의 프로젝트 jre 환경 도 바 뀌 었 기 때 문 일 것 입 니 다.
idea 는 tomcat 가 내장 되 어 있 기 때문에 tomcat 를 추가 로 설정 하지 않 아 도 됩 니 다.
아이디어 에서 실행→편집 구 조→설정 에서 jre 환경 선택
저 는 1,8 을 선택 한 환경 입 니 다.

Paste_Image.png
다시 시작 항목:

Paste_Image.png
시작 성공
10.my batis 가 데 이 터 를 삽입 할 때 기본 값 이 적용 되 지 않 습 니 다.
삽입 문

<insert id="insert" useGeneratedKeys="true" keyProperty="id">
 insert into mmall_category (id, name, status)
 values (#{id}, #{name},#{status})
 </insert>
대응 하 는 mapper

void insert(Category category);
데이터베이스 디자인 을 할 때 status 를 기본 값 으로 설정 하면 들 어 올 대상 이 필요 합 니 다.
대상 에 전 송 될 때 name 에 만 값 을 부여 한 결과 데이터베이스 에 status 값 이 null 인 것 을 발견 할 수 있 습 니 다.
이것 은 이 대상 의 다른 속성 구성원 이 값 을 부여 하지 않 으 면 기본적으로 null 이 고 sql 구문 에서\#{status},즉 null 을 status 에 부 여 했 기 때 문 입 니 다.그러나 가끔 status 를 전달 해 야 할 때 가 있 습 니 다.\#{status}를 제거 할 수 없습니다.그러면 어떻게 해 야 합 니까?
해결 방법:

<insert id="insert" useGeneratedKeys="true" keyProperty="id">
 insert into mmall_category 
 (id, name
 <if test="status != null">
 ,status
 </if>)
 values (#{id}, #{name}
 <if test="status != null">
 ,#{status}
 </if>)
 </insert>
my batisif test를 사용 하여 값 을 판단 합 니 다.null 이 라면 값 을 부여 하지 않 습 니 다.
my batis 의 고급 결과 맵
association C 의 복잡 한 유형 관련;많은 결 과 는 이런 유형 으로 포 함 될 것 이다.
결과 맵 C 결 과 를 삽입 하여 자신의 연결 을 표시 하거나 하 나 를 참고 하 십시오.
보기 에는 매우 이해 하기 어 려 운 것 같 으 니,실례 를 좀 봅 시다.
resultMap 에 이런 맵 이 있 습 니 다.

<association property="user" column="user_id" select="com.mapper.UserMapper.selectByPrimaryKey"/>
select 로 대상 을 조회 할 때 userId 의 값 을 가 져 오 려 면 맵 의 대상 을 가 져 오고 ID 를 가 져 와 야 합 니 다.그렇지 않 으 면 userId 를 직접 가 져 오 면 비어 있 습 니 다.
11.InterlliJ Debug 방식 의 작 동 은 매우 느리다.
Method breakpoints may dramatically slow down debugging
서버 를 다시 시작 하 든 아 이 디 어 를 다시 시작 하 든 이 문 제 를 보고 하 든이 제시 어 에서 우 리 는 방법 을 정지점 에서 꺼 야 한 다 는 것 을 알 수 있다.정지점 을 보 는 단축 키 는Ctrl + Shift +F8이다.
Java Method Breakpoints빼 면 돼 요.
오류Caused by: java.lang.IllegalStateException: In the composition of all global method configuration, no annotation support was actually activated원인:모든 전역 방법 으로 설 정 된 조합 에서 주석 지원 이 실제로 활성화 되 지 않 았 습 니 다.
해결 방법:
시작 클래스 에 추가@EnableGlobalMethodSecurity(securedEnabled = true)

@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true)
public class Application {
 public static void main(String[] args) {
 SpringApplication.run(Application.class, args);
 }
}
12.MyBatis 귀속 오류Invalid bound statement (not found)이 오 류 는 주로mapper인터페이스 와mapper.xml의 경로 가 일일이 대응 하지 않 고mapper.xml디 렉 터 리 에 넣 을 수 없 기 때 문 입 니 다.설정 파일 은src에 넣 어야 합 니 다.resources디 렉 터 리 에 있 는src파일 은 기본적으로 컴 파일 되 지 않 습 니 다xml.
13.리 트 윗 요청 또는 리 셋 으로 이상 발생target원인:
이상 을 알 리 는 이 유 는 중복 퍼 가기 나 재 설정 요청 때 문 입 니 다.
해결 방법:
만약 에 여러 개의 리 트 윗 이나 리 트 윗 이 있 으 면 모든 리 트 윗 이나 리 트 윗 요청 후에java.lang.IllegalStateException: Cannot forward after response has been committed문 구 를 추가 해 야 합 니 다.(마지막 요청 리 트 윗 이나 리 트 윗 은 추가 하지 않 아 도 됩 니 다)
14.SpringBoot 는 데이터베이스 연결 풀 을 설정 하지만 로 그 는 매번 새 연결 을 만 듭 니 다.
Mybatis 에서 SQL 문 구 를 콘 솔 에 동적 으로 인쇄 하려 면 SpringBoot 설정 파일 에 다음 설정 을 추가 하면 됩 니 다.

mybatis:
 configuration:
 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
하지만 연결 풀 을 사용 하지 않 으 면 인쇄 하지 않 습 니 다.

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a5ca7d7] was not 
registered for synchronization because synchronization is not active
JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@9a51d74] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a5ca7d7]
해결 방법:
사용 가능 한 연결 탱크 가 사용 되 는 지 확인 하고 제3자 연결 탱크 를 도입 하려 면 설정 을 잘 해 야 합 니 다.
15.SpringBoot 프로젝트 에서 service 층 이 서로 참조 합 니 다.

Description:
The dependencies of some of the beans in the application context form a cycle:
 xxxController (field private aaaService xxxController.aaaService)
┌─────┐
| aaaImpl defined in file [aaaImpl.class]
↑ ↓
| bbbImpl (field private aaaService bbbImpl.orderService)
└─────┘
해결 방법:
주입 방식 은return주해@RequiredArgsConstructor방식 으로 잘못 주입 되 었 다.
주입 방식 을final으로 바 꾸 어 성공 적 으로 해결 하 다.
16.SpringBoot 설정 파일 에 오래된 설정 항목 을 사 용 했 습 니 다.
Caused by: org.springframework.boot.context.properties.bind.UnboundConfigurationPropertiesException:
The elements [spring.resources.chain.gzipped] were left unbound.
폐 기 된 설정 항목

spring:
 resources:
 chain:
 gzipped: true
해결 방법:만 료 된 설정 항목 을 삭제 하면 됩 니 다.
SpringBoot 프로젝트 에서 발생 하 는 버그 문제 와 해결 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 SpringBoot 프로젝트 에서 버그 내용 을 만 났 으 면 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기