어제 일하는데 3시간동안 찾아봐도
마땅한 대안을 찾지 못해서, 여기 글을 올렸는데
아무도 대답해 주지 않았는데,
어떻게 야매로 해결을 해서 답변을 올려 보도록 한다.
먼저 주기적으로 db를 조회하여 list 갯수 만큼
multi thread를 생성해서 돌려야 되는 기능을 만들었어야 했는데,
MultiThread multiThread = new MultiThread(param1, param2, param3...)
이렇게 생성자를 넣고 new Operator를 하는 순간
spring에서는 생성된 객체를 bean으로 등록하지 못하고,
MultiThread라는 객체 안에서 @Autowired된 객체들도 당연히 사용하지 못하게 된다.
물론 @Component나 @Repository @Service등으로 등록하여 쓸순 있지만.
extends Thread를 구현해본 사람들은 알겠지만.
객체를 .start() 함수를 써야만 쓰레드가 생성이 된다.
파라미터들을 넘길 방법이 없었는데,
야매로 넘겨도 되더라.
먼저, applicationContext에
해당 extends Thread를 구현한 class의 생성자들을 bean에 추가 해준다.
안하면 생성자 부분 에러남.
그리고 set 함수를 만들어.
pulbic void xxxxSet(파라미터로 injection하고 싶은 객체들을 보내줌.)
그리고
set함수 위에 @Autowired를 해주고,
private Param1 param1;
private Param2 param2;
private Param3 param3;
...
@Autowired
public void xxxSet(Param1 param1, Param2 param2, Param3 param3){
this.param1 =param1;
...
}
이런식으로 해도.
되더라구.
개 야매지만 이렇게 쓰는데 훨신 설정하기 편할거다.
물론 @Configurable, aspectj 로 위빙해서 써도 된다고 하는데,
내가 해본바로는 안되더라..(아무리 설정해도 피할수 없는 null pointer exception)
3시간 삽질한 결과에 대한 내용이기도 하고,
new Operator를 해야 하는데 injection을 해야하는경우 참고하길 바란다.
아 참고로 threadpool 로 해도 됨.
갯수->개수 (개수 (個數)[명사] : 한 개씩 낱으로 셀 수 있는 물건의 수효.) [리듬 맞춤법 봇♬]