eclipes4j's 개발은 언제나 즐겁다.

Mac java version 전환하기

Programming!

팀에서 신규플젝을 진행하게 되어 새롭게 시작하는 김에 까짓 java version도 올리자!! 라는 생각으로 11 로 환경을 맞추고 있다.


뚜시궁!! Spring Boot 2.1.x + JAVA(OpenJDK) 11



# brew upgrade

# brew update


# brew cask info java

java: 11.0.1,13



# brew cask install java


# /usr/libexec/java_home



# vi ~/.bashrc 또는 ~/.zshrc 또는....


하단에 아래처럼 추가해 준다.


alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"

alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"



이제 터미널에서 alias를 실행 시키면서 java version을 전환할 수 있다.


# j8


# j11




List<Order>의 Order 내 List<OrderItem>을 갖는 경우 OrderItem 기준으로 List 생성

Programming!


public class Order {

    private Long id;

    private List<OrderItem> orderItems;

}



List<Order> orders = ....


위와 같이 Order 에 대한 List를 있을 경우, OrderItem을 꺼내 새로운 List<OrderItem>를 만들고 싶을 경우가 있다.

해서 1차적으로 

List<OrderItem> orderItems = new ArrayList<>();

for (orders...) {

    for(o.getOrderItems()...) {

       ... orderItems.add(oi);

    }

}


위와 같은 형태로 중복 for 문을 생각해볼 수도 있을 것이고. 이후,

List<OrderItem> orderItems = new ArrayList<>();

orders.stream().foreach(o->{    

    List<OrderItem> orderItems = o.getOrderItems().stream().map(..).collect(Collectors.toList())

    orderItems.addAll(orderItemDtos);

});


이렇게 stream과 foreach를 이용해 어정쩡하게 할 수도 있겠지만.. 그냥 flatmap을 이용하는 방법이 가장 좋다.

List<OrderItem> orderItems = orders.stream().flatMap(o -> o.getOrderItems().stream()).collect(Collectors.toList());



근데 병렬로 하는게 빠르려나..쩝

eclipse 에서 gradle querydsl 소스 생성시 dupulicate entry 문제

Programming!

eclipse 에서 gradle querydsl 소스 생성시 dupulicate entry 문제



뭐 딱히 generate task 를 만들지 않고 아래처럼 돌렸을 경우 eclipse에서는 정상적으로 생성된 클래스에 대한 classpath가 등록되는데,

querydsl {

    library = "com.querydsl:querydsl-apt:${querydslVersion}"

     ...


}


idea에서는 화면에 물려있는 classpath가 실제 build를 돌리면 generate-sources를 인식하지 못한다. 해서 intellij기준으로 맞추면 eclipse에서 중복된 classpath 등록 오류가..


여튼 작업자들이 idea를 사용하니 idea기준으로 작업환경을 유지해 주는 것으로 하기위해 eclipse 에 대한 glradle 로직을 추가했다.

....

eclipse.classpath.file {

  whenMerged { classpath ->

    def cpath = classpath.entries.findAll {

    entry -> entry.kind == 'src' && entry.output == 'bin/querydsl'

      }

      classpath.entries.removeAll (cpath)

  }

}



JPA EhCache 사용.

Programming!
이전에는 redis나 memcached에 일반 엔티티들도 우걱우걱 밀어넣었는데, 네트웍 과부하 문제나 불필요한 트래픽 문제를 겪고 나서는 그냥 가벼운 엔티티 호출의 경우는 로컬 ehcache에서 읽어오도록 하고 있다.

@Cacheable

@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Goods {
...


  • Read-only: Useful for data that is read frequently but never updated (e.g. referential data like Countries). It is simple. It has the best performances of all (obviously).

  • Read/write: Desirable if your data needs to be updated. But it doesn't provide a SERIALIZABLE isolation level, phantom reads can occur (you may see at the end of a transaction something that wasn't there at the start). It has more overhead than read-only.

  • Nonstrict read/write: Alternatively, if it's unlikely two separate transaction threads could update the same object, you may use the nonstrict–read–write strategy. It has less overhead than read-write. This one is useful for data that are rarely updated.

  • Transactional: If you need a fully transactional cache. Only suitable in a JTA environment.



eclipse에서 junit5 실행 안되는 경우

Programming!

"eclipse no tests found with test runner junit 5"


타 팀원은 모두 IntelliJ지만 아직 eclipse의 건재함을 알리고저 끝까지 쓰고있는 eclipse... 갈 수록 힘들어 지고 있다. (여기에 kotlin들어오면 그냥 intellij로 갈꺼라는..)


여튼.. 열심히 개발하고 있던 플젝에서 옆팀원이 Junit 5를 쓰자며 관련 모듈들을 gradle에 추가한 후, 나의 eclipse에서 받아서 실행을 하니 위의 오류가 뜬다.


추가된 build.gradle 의 항목.


    testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")

    testCompile("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")

    testCompile("org.junit.platform:junit-platform-runner:${junitPlatformVersion}")

    testCompile("org.junit.platform:junit-platform-launcher:${junitPlatformVersion}")


이경우 intellij에서는 되지만(왜??) eclipse에서는 단일 메소드별로 실행되지 않았다. 해서 찾아보는데 죄다...위에 저것만 추가하면 된다고..쓰읍.


아래처럼 모듈 하나를 더 추가해야만 정상적으로 실행할 수 있다.


testCompile group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.2.0'



끝까지 가보자 eclipse!!!