기본 콘텐츠로 건너뛰기

라벨이 spring인 게시물 표시

스프링부트, logging

Logging 스프링부트는 Java Util Logging, Log4j2, Logback을 기본적으로 제공한다. 내부적으로 apache common logging 을 사용하나 변경이 가능하다 만약 ‘Starters’를 사용한다면 Logback이 사용된다. Log Format 시간/로그레벨/process id/ 구분자(—)/ thread 명/ logger 명 / 메세지 2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms Color-coded Output 로그에 색을 입힐 수도 있다. spring.output.ansi.enabled 값을 설정해주면 된다. Enum Constants Enum Constant Description ALWAYS Enable ANSI-colored output. DETECT Try to detect whether ANSI coloring capabilities are available. NEVER Disable ANSI-colored output. File Output 기본적으로 스프링 부트는 파일에는 로그를 남기지 않고 콘솔에만 표시한다. ...

스프링부트, Externalized Configuration

환경변수 설정 설정파일을 어플리케이션 밖에서 관리함으로써 같은 어플리케이션으로 여러가지 설정을 변경하면서 운영할 수 있다. Properties files, yaml files, environment variable, command-line arguments 사용 @Value 어노테이션을 통해 주입받을 수 있다. 우선순위 스프링부트에서는 환경변수값을 읽는 우선순위가 있다. 만약 예사외의 값이 적용되었다면 아래 순위를 확인해보자 devtools -> test관련 -> command line -> servlet -> Jndi -> system property -> environments -> random -> properties file -> @Configuration classes 1. [Devtools global settings properties](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-devtools-globalsettings) on your home directory (~/.spring-boot-devtools.properties when devtools is active). 2. [@TestPropertySource](https://docs.spring.io/spring/docs/5.0.5.BUILD-SNAPSHOT/javadoc-api/org/springframework/test/context/TestPropertySource.html) annotations on your tests. 3. [@SpringBootTest#properties](https://docs.spring.io/spring-boot/docs/2.0.1.BUILD-SNAPSHOT/api/org/springframework/boot/test/context/Spr...

스프링부트, spring-boot-devtools

스프링부트에서 소스코드 수정시 자동으로 서버를 재시작 하는 기능등을 제공한다. maven dependencies < dependencies > < dependency > < groupid > org.springframework.boot </ groupid > < artifactid > spring-boot-devtools </ artifactid > < optional > true </ optional > </ dependency > </ dependencies > 자동 restart classpath가 변경되면 어플리케이션이 자동으로 restart ide마다 차이가 좀 있는데 eclipse는 저장시에 classpath 변경이 발생하지만, intellij는 build project 기능을 통해 진행된다. Restart vs Reload spring boot는 2개의 classloader를 사용 Base classloader : 변하지 않는 3rd party용 .jar파일같은 Restart classloader : 개발자가 직접 작성하는 클래스 같은 Restart 실행시에 base classloader가 미리 작업한 부분은 할필요하고 없으므로 효율적임 만약 restart 가 충분히 빠르지 못하게 작동한다면 JRebel의 reloading을 고려 Excluding Resources /META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates 이곳 폴더들은 변경이 일어나도 restart가 발생하지 않음 spring.devtools.restart.exclude= static /**,public/** 이런식으로 추가로 설정가능 Watching...

log4j sql 로그찍기

log4j로 sql 로그 찍는법이다. 우선 datasource의 레퍼런스 클래스부터 설정해야된다. <bean id = "dataSource" class = "net.sf.log4jdbc.Log4jdbcProxyDataSource" > < constructor - arg ref = "dataSourceOrg" / > < property name = "logFormatter" > <bean class = "net.sf.log4jdbc.tools.Log4JdbcCustomFormatter" > < property name = "loggingType" value = "MULTI_LINE" / > < property name = "sqlPrefix" value = "SQL ----" / > < / bean> < / property > < / bean> 참조될 클래스는 이거다. net.sf.log4jdbc.tools.Log4JdbcCustomFormatter 사실 이는 logFormatter를 쓰기위함이다. 그안의 내용은 대충 저렇다. sqlPrefix 는 해당 로그가 찍힐때 시작되는 접두어다. log4j 설정부분은 일반 로그appender 설정과 동일하다 ( http://changpd.blogspot.kr/2013/05/spring-lo4j.html ) 참조 <!-- appender :: sql --> < appender name = "sql-appender" class = "org.apache.log4j.DailyRollingFileAppe...

[spring] log4j 설정 및 사용법

log4j에서 사용하는 log 레벨은 여섯단계이다.  TRACE 으로 설정하면 모든 레벨의 로그가 전부 기록되지만 FATAL 으로 설정하면 FATAL보다 하위수준의 로그는 기록되지 않는다.  Log4j 설정  log4j를 사용하기 위해 pom.xml과 web.xml에 다음처럼 추가한다.  - Log4j Maven dependencies <dependencies> <dependency> <groupId> org.apache.logging.log4j </groupId> <artifactId> log4j-api </artifactId> <version> 2.0-beta6 </version> </dependency> <dependency> <groupId> org.apache.logging.log4j </groupId> <artifactId> log4j-core </artifactId> <version> 2.0-beta6 </version> </dependency> </dependencies> - Web.xml <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener> <context-param> <param-name> log4jConfigLocation </param-name> ...

[spring] 인터셉터 와 필터

스프링에서 전후처리기(?)를 담당하는 인터셉터 와   필터 라는게 있다.  둘다 알고 계신 훌륭한 개발자 분들도 많으시겠지만 ㅋ  본인처럼 인터셉터만 알고 있는 경우에는  가볍게라도 필터에 대해서 알아두시라고 몇자 적어 본다. ㅎ  사실  기능만 보면  인터셉터와 필터는  무척 비슷해 보인다.  게다가 filter로 해야 되는 일들은  사실   interceptor로 해결할 수 있는 듯 하다.  (적어도 본인이 하고 있는 프로젝트에서는.. ㅋ) 구글 창에다가  'difference interceptor and filter' 의 검색결과가 여러페이지 나오는 걸 보면 많은 사람들이 궁금해 하는게  다 이러한 이유인것 같다.  본론으로 들어가서  우선 인터셉터 설정파일을 보면  < mvc:interceptors > < mvc:interceptor > < mvc:mapping path = "/api1/*" /> < mvc:mapping path = "/api2/*" /> < mvc:mapping path = "/api3/*" /> < bean class = "com.changpd.test.interceptor.인터셉터클래스" /> </ mvc:interceptor > </ mvc:interceptors > 보통 이런식으로 선언 되어있을듯 하다.  해석은  api1,2,3 호출되기전에 인터셉터클래스를 먼저 호출하겠다.  뭐 이런...

[spring] mvc:default-servlet-handler

오늘 스프링을 새로 깔아서 프로젝트를 띄웠는데, view 폴더 밑에 jsp들은 리졸버가 잘 가져오는거 같은데, 뷰에 include 되어있는 js/css 들이 로드 되지 않음. WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/css/test.css] in DispatcherServlet with name 'appServlet' WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/js/jquery.mobile-1.0a2.min.js] in DispatcherServlet with name 'appServlet' js/css 위치는 webapp/css webapp/js 이유가 뭘까 하다가. servlet-context.xml(dispatcher 설정된곳)에다가 <mvc:default-servlet-handler/> 추가하니까 해결됨. 스프링의 모든 url 요청은 DispatchServlet에서 받는다. 그리고 나서 적당한 컨트롤러에게 전달을 해주는것이다. 그런데 만약 해당되는 컨트롤러가 없을때 <mvc:default-servlet-handler/>를 적어주면 내부적으로 DefaultServletHttpRequestHandler가 처리하게 되는 것이다. 

[spring] json으로 떨궈주기

스프링에서 json으로 떨궈주는법. 생각보다 간단함. 1. @ResponsBody - 컨트롤러 함수 선언부에 @ResponsBody 추가 public @ResponseBody Map<String, Object> Test { ... return Map; } 2. dependency 추가 <dependency>      <groupId>org.codehaus.jackson</groupId>      <artifactId>jackson-mapper-asl</artifactId>      <version>1.6.4</version> </dependency> 끝.