Java Spring 에서 Firebase 데이터베이스를 핸들링 하고싶습니다.

조회수 1886회

JAVA Spring 을 사용하여 Firebase 의 데이터베이스를 핸들링 하는 앱을 만드는 중입니다.

문제는 firebase 데이터베이스가 SQL 연결이이나 REST방식이 아닌, 자체적인 EventListener방식으로 동작을 하여 언제 값이 들어올지 모르는 상태이고, 항상 EventListener을 통하여 값을 가져와야 하는 상황입니다.

아래는 제가 만든 코드이고 항상 REST값은 빈 리스트가 뜨지만 수행되고 최초엔 5초뒤에 로그에 값들이 찍히고 이후엔 1초내로 로그에 값이 찍히지만 REST 에선 값이찍히지 않는 상황입니다.

세마포어 등을 사용하여 listener가 값을 가져오는 경우를 판별하고 그동안 락을 걸어야 하는지,

쉽게 해결하는 방법이 있는지 궁금합니다.

@RestController
@RequestMapping("show")
public class ShowViewController {

    @Autowired
    ShowService showService;

    @RequestMapping(method = RequestMethod.GET)
    public List listShow(Model model) {

        /**
         * 1. Service 호출
         */
        List showList = showService.getShowList();
        model.addAttribute("list", showList);

        /**
         * 5. showList 리턴
         */
        return showList;
    }

}
@Service
@Slf4j
public class ShowService {

    private List<Show> showList;

    @Async
    public List<Show> getShowList() {
        /**
         * 2. 호출된 Service 의 Method
         */

        showList = new ArrayList<>();

        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
        DatabaseReference ref = firebaseDatabase.getReference("shows");

        /**
         * 3. Handler로 데이터 가져오기
         */
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                log.info("listner");
                Iterable<DataSnapshot> children = dataSnapshot.getChildren();
                /**
                 * 4. 데이터를 Model에 매핑하는 비동기 처리
                 */
                for (DataSnapshot child : children) {
                    Show show = child.getValue(Show.class);
                    log.info("show = {}",show.getTitle() );
                    showList.add(show);
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
        return showList;
    }

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.