SpringBoot 는 사용자 정의 클래스 에서 service 층 등 Spring 다른 층 을 호출 합 니 다.
스마트 장치 에 접속 하기 위해 TCP 서버 를 만 든 다음 에 장치 가 실시 간 으로 보 내 는 포 지 셔 닝 등 관건 적 인 정 보 를 데이터베이스 에 저장 해 야 한다.
앞으로 rest 인 터 페 이 스 를 대외 적 으로 제공 할 수 있 음 을 고려 하기 위해 TCP 서버 를 SpringBoot 프레임 워 크 에 통합 하 는 것 도 물론 my batis 프레임 워 크 를 가장 빨리 이용 하여 데이터 접근 을 실현 한 다음 에 어떻게 시작 하 는 지,어떻게 로그아웃 하 는 지 등 여러 가지 문 제 를 순서대로 해결 한 다음 에 TCP 서버 메시지 처리 시 데이터 베 이 스 를 작성 하고 DAO 층 을 직접 호출 하여 오 류 를 컴 파일 해 야 합 니 다.
호출 Service 층 으로 바 꾸 고 컴 파일 이 정상 적 이 며 호출 된 곳 으로 실 행 됩 니 다.빈 포인터 가 이상 하고 이상 한 위치 로 추적 되 었 습 니 다.service 가 비어 있 는 것 을 발 견 했 습 니 다.즉,이전 contrller 층 에 따라@Autowired 를 통 해 service 층 을 주입 하 는 것 이 실 효 됩 니 다.
해결 방안:
1.코드 올 리 기
@Component
public class ServerHandler extends IoHandlerAdapter {
@Autowired
protected HealthDataService healthDataService;
private static ServerHandler serverHandler ;
@PostConstruct // @PostConstruct bean
public void init() {
serverHandler = this;
serverHandler.healthDataService = this.healthDataService;
// testService
}
//
public void test(){
serverHandler .healthDataService.< service >;
}
2.설명:Spring 을 호출 할 Service 층 의 클래스 를@Component 주 해 를 통 해 구성 요소 로 불 러 옵 니 다.
마찬가지 로@Autowired 를 통 해 서비스 층 의 Bean 대상 을 가 져 옵 니 다.
클래스 에 정적 변 수 를 설명 하기 위해 다음 단계 에 bean 대상 을 저장 하 는 데 편리 합 니 다.
중점:주석@PostConstruct 를 통 해 초기 화 할 때 정적 대상 과 정적 구성원 변수 인 healthDataService 를 초기 화 합 니 다.원 리 는 service 층 bean 대상 을 가 져 와 정적 으로 저장 하여 방출 되 는 것 을 방지 하 는 것 입 니 다.
지나 간 구덩이 들:
처음에 호출 을 시 작 했 을 때 항상 간단 하 다 고 생각 했 습 니 다.예전 에 springmvc 에서 설정 을 썼 습 니 다.대상 을 bean 으로 표시 하면 Spring IOC 용기 의 beans 를 마음대로 호출 할 수 있 었 습 니 다.그러나 이것 은 SpringBoot 였 습 니 다.차이 가 있 을 것 입 니 다.한 번 에 바 이 두 에서 나 온 세 페이지 의 도움 을 시험 해 보 았 지만 거의 성공 하지 못 했 습 니 다.포함:
1)도구 류 를 spring 구성 요소 로 표시 합 니 다.예 를 들 어@contrller@copent 등 은 spring 자동 스 캔 패키지 설정 에서 도구 류 가 있 는 가방 을 추가 합 니 다.무효
2)new service;무효
springboot 여러 서비스 가 서로 호출 되 는 트 랜 잭 션 처리
하나의 service 방법 A 에서 다른 service 를 호출 하 는 방법 B.방법 A 와 방법 B 는 모두 데이터 베 이 스 를 삽입 하 는 작업 이 존재 하고@Transaction 주석 도 추가 되 었 으 나 B 방법 에서 이상 을 던 졌 을 때 A 의 삽입 문 구 는 성공 적 으로 실 행 될 수 있 습 니 다.
설명 설정 은 다음 과 같 습 니 다:
@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED)
아무리 생각해 도 이해 가 되 지 않 고 관련 자 료 를 찾 은 후에 문 제 는@Transaction 주해 의 설정 에 있 습 니 다.이상 스크롤 백 을 설정 해 야 합 니 다.
@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = Exception.class)
이렇게 하면 B 방법 에서 이상 을 던 지면 A 의 조작 도 스크롤 백 을 하고 사 무 는 제어 역할 을 한다.이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.