개발 (63)
gradle 빌드 환경에서 profile 적용하기

java -jar 이런걸로 실행시키면 문제될게 없지만

gradle의 bootRun task를 사용할때 스프링 프로파일 적용 방법입니다

build.gradle에 아래와 같이 설정 추가하면 됩니다.


build.gradle

bootRun {
String activeProfile = System.properties['spring.profiles.active']
systemProperty "spring.profiles.active", activeProfile
}



Dockerfile

ENTRYPOINT ["./gradlew"]
CMD ["bootRun", "-Dspring.profiles.active=prod"]


0  Comments,   0  Trackbacks
댓글 쓰기
docker-compose up 빌드 오류 발생 시 해결 방법

ERROR: Service 'app' failed to build: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 10.0.2.3:53: read udp 10.0.2.15:43602->10.0.2.3:53: i/o timeout

도커에서 기동시 위와 같은 오류가 날 경우 아래와 같이 입력 후 기동을 한다


$ docker-machine restart default
$ eval $(docker-machine env default)


$ docker-compose.exe up
Building app
Step 1/5 : FROM openjdk:10.0.1-jdk
ERROR: Service 'app' failed to build: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 10.0.2.3:53: read udp 10.0.2.15:43602->10.0.2.3:53: i/o timeout

$ docker-machine restart default
Restarting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

$ eval $(docker-machine env default)

$ docker-compose.exe up
Building app
Step 1/5 : FROM openjdk:10.0.1-jdk
10.0.1-jdk: Pulling from library/openjdk
e367ac4072dc: Pull complete
9a57779b5dba: Pull complete
7a4c28c5ff25: Pull complete
9a8bf5e9a1f1: Pull complete
0e45f9a301ef: Pull complete
70656c3c9396: Pull complete
e1eb305208da: Pull complete
e022358c7c3e: Pull complete


0  Comments,   0  Trackbacks
댓글 쓰기
git 사용시 .idea 제거하기(workspace.xml 제외)

intellij 사용중 git에서 .idea/workspace.xml이 커밋되어 빠지지 않을경우 사용

git bash를 이용해서 작업을 하면 된다


mv .idea ../.idea_backup
rm .idea
git rm -r .idea 
git commit -m "Remove .idea from repo"
mv ../.idea_backup .idea


0  Comments,   0  Trackbacks
댓글 쓰기
web sequence diagram 오픈

Web sequence diagram 오픈


온라인으로 다이어그램을 쉽게 그려준다

사실 다른 사이트꺼 가져다가 한글 오류 수정하고 쓰기 편하게 바꿈


http://wsd.donnert.net

'개발' 카테고리의 다른 글

docker-compose up 빌드 오류 발생 시 해결 방법  (0) 2018.10.12
git 사용시 .idea 제거하기(workspace.xml 제외)  (0) 2018.09.07
web sequence diagram 오픈  (0) 2018.07.10
딴짓 오픈  (0) 2018.06.28
이클립스 플러그인 추천  (0) 2014.02.20
SecureCRT 한글 깨짐  (0) 2013.11.27
0  Comments,   0  Trackbacks
댓글 쓰기
딴짓 오픈

여러 커뮤니티들의 인기글 링크 제공


리액트와 코틀린 공부도 할겸 제작

혼자 필요한 기능 넣으면서 잘 사용중

(현재 클리앙,웃대,엠팍,펨코,딴지,인스티즈,보배 지원)


http://ddanzit.donnert.net

'개발' 카테고리의 다른 글

git 사용시 .idea 제거하기(workspace.xml 제외)  (0) 2018.09.07
web sequence diagram 오픈  (0) 2018.07.10
딴짓 오픈  (0) 2018.06.28
이클립스 플러그인 추천  (0) 2014.02.20
SecureCRT 한글 깨짐  (0) 2013.11.27
[HTML] 기본 context 경로 지정하기  (0) 2013.05.21
0  Comments,   0  Trackbacks
댓글 쓰기
스프링 부트+마이바티스에서 트랜잭션이 안먹을때

@Transactional(rollbackFor = Exception.class)


1. rollbackFor를 명시해준다

2. 메소드는 public으로 선언해준다


다른 패키지에서 안쓴다고 public으로 안했다가 삽질 경험

그 외에 다른 DataSourceTransactionManager니 @EnableTransactionManagement니

이런거 안넣어도 잘 동작함(블로그 글 기준)


[개발/JAVA] - 스프링 부트(Spring boot)에서 mybatis(oracle) 적용하기


참고

https://stackoverflow.com/questions/7085271/how-to-set-up-transaction-with-mybatis-and-spring



2  Comments,   0  Trackbacks
댓글 쓰기
코틀린으로 스프링 사용 시 ClassNotFoundException: kotlin.reflect.full.KClasses

Caused by: java.lang.ClassNotFoundException: kotlin.reflect.full.KClasses

at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_151]

at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_151]

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) ~[na:1.8.0_151]

at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_151]

... 26 common frames omitted


코틀린으로 스프링을 사용 시 위와 같이 오류가 난다

이 경우 kotlin-reflect을 추가해주면 간단히 해결


<!-- https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect -->

<dependency>

    <groupId>org.jetbrains.kotlin</groupId>

    <artifactId>kotlin-reflect</artifactId>

    <version>1.2.41</version>

</dependency>



0  Comments,   0  Trackbacks
댓글 쓰기
H2 DB 사용 중 file is locked 발생

H2 DB를 사용 시 다음과 같은 오류 메세지를 만날때가 있습니다


The file is locked


내용 보면 알겠지만 여러 프로세스에서 동시에 접근할때 발행하는 오류입니다

제 경우 API 서버를 띄워놓고 배치를 돌릴때 이미 DB를 사용중이기 때문에 발생한 경우였습니다.

그럴 경우 설정을 다음과 같이 변경해 주시면 두개의 프로세스에서 동시 접근이 가능합니다.


datasource:
# url: jdbc:h2:file:~/test
url: jdbc:h2:~/test;AUTO_SERVER=true
username: sa
driver-class-name: org.h2.Driver


0  Comments,   0  Trackbacks
댓글 쓰기
spring profile 사용시 주의점

최근 삽질


application.yml에 값을 설정 해두고

spring:
profiles: local
sleep:
min: 100
max: 500
---

spring:
profiles: dev

sleep:
min: 500
max: 1000


application.properties에 아래와 같이 프로파일을 설정해주었다

spring.profiles.active=dev


어플리케이션 구동했으나 계속 발생하는 오류.  심지어 다른 서버에서는 정상 동작


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sleepAspect': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sleep.min' invalue "${sleep.min}"


오류를 유심히 보니 프로파일이 다른것으로 적용이 되고 있었음
INFO(6347)[main] [n.d.TestApplication:656] The following profiles are active: dev1


원인은 서버 환변경수에 다음과 같이 프로파일이 적용되고 있었음

$ env | grep PROFILE

SPRING_PROFILES_ACTIVE=dev1


결론은 프로퍼티보다 서버 환경변수의 값이 먼저 적용하기 때문에 쉘 스크립트에서 환변경수를 초기화

프로그램안에만 적용되기 때문에 다른 프로그램에는 영향 없음

SPRING_PROFILES_ACTIVE=

nohup java -cp application.properties -jar donnert.jar > console.log 2>&1 &



0  Comments,   0  Trackbacks
댓글 쓰기
@Scope 어노테이션 사용하기(request+ProxyMode)

[개발/JAVA] - Threadlocal을 이용하여 사용자별 요청 처리하기


ThreadLocal과 같이 보시면 좋습니다.

스프링에서 빈 Scope 타입은 여러가지 방식이 있으며 아래를 참고해 주세요.

https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html


별도의 옵션이 없다면 빈은 싱글톤으로 관리되며 부모의 속성을 따라갑니다.

즉 controller는 따로 설정을 하지 않았기 때문에 singleton으로 동작하게 되며 그 안에서 주입받은 빈 역시 scope를 request로 줘도 singleton으로 동작하게 됩니다.

빈을 생성해 주고 위에 보이는것처럼 scope를 request로 선언해줍니다. 


그리고 위처럼 컨트롤러를 구현합니다.

위 경우 Cart가 매 요청마다 생성될것 같지만 이미 Controller(부모)가 싱글톤으로 잡혀있고 빈을 주입받은 상태이기 때문에 Cart 역시 싱글톤으로 동작합니다.  결국 Cart와 Mart는 동작 상 다른 점이 없습니다.


이럴땐 아래처럼 ProxyMode를 지정하게 되면 싱글톤 객체를 중간 프록시에서 새로운 오브젝트로 전달을 해주게 됩니다.

이전 글에서 Threadlocal을 이용했지만 스프링의 빈 만으로도 쉽게 개발이 가능합니다.


https://github.com/donnert/spring-boot/tree/master/scope-proxy

0  Comments,   0  Trackbacks
댓글 쓰기