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 의 조작 도 스크롤 백 을 하고 사 무 는 제어 역할 을 한다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기