• SpringToolSuite4.ini
    • heap dump 옵션 : -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/gclogs/
    • 메모리 옵션 : -Xms256m -Xmx1024m
    • 롬복 옵션 : -javaagent:/.../lombok.jar
    • ...
  • "Folder" Vs "Source Folder"
    • A source folder is marked by Eclipse as containing java sources. Then, when you compile your project Eclipse will look for your source code into all your source folders.
    • You can make any folder become a source folder adding it to the java build path. Thus, next time you compile your project Eclipse will also look for java classes in that folder.
    • "New folder" creates a new folder inside a project.
    • "New source folder" creates a new folder inside a project, and adds this folder to the set of source folders of the project. Eclipse will compile the files in this folder.
    • "New package" creates a new Java package inside a source folder. It also creates the folder associated with the package, of course.
    • (IDE에서 특별한 표식이 있는) Source Folder는 말 그대로... Compiler가 Compile할 SourceCode를 찾을 Folder 임.
    • (우클릭 등으로...) Folder를 만들 수 있고, 또한 Source Folder 대상으로 추가 할 수도 있는 것.
  • 메모
    •  New -> Maven Project -> (maven-archetype-quickstart)
      • 예) com.compony.project , api
      • 예) com.compony.project , batch.polling
      • 예) com.compony.project , batch.consuming
    • "Window.Preferences.Java.InstalledJREs" -> JDK확인
    • "STS Run Configuration" -> "Program arguments" -> (System Level에서 인식이 안되는 이슈 있었음)
    • "STS Run Configuration" -> "Java VM arguments" -> (-Dspring.profiles.active=local -Dproject.test=테 ... )
    • crontab
      • 예) 05 09 * * 0-6 /app/project/test.sh > /app/project/test.out 2>&1
      • 예) test.sh
        • #!/bin/bash
        • echo "[`date +%Y-%m-%d_%H:%M:%S`] test"
        • source /etc/profile
        • java -Dspring.profiles.active=dev -jar /app/project/test.jar
        • exit 0
    • ...
  • 어노테이션
    • @Import
      • 상속보다는 좀 더 유연하고 확장성이 좋음.
      • 특정 Class의 기능을 손쉽게 받을 수 있음.
      • 예) @Import({AAA.class, BBB.class, CCC.class})
    • @Bean(name="이름", initMethod="함수", destroyMethod="함수")
      • (직접 내부를 다룰수 없는) "외부 라이브러리 Class"는 @Bean으로 명시하여 사용을 하면 된다.
      • 즉, "해당 외부 라이브러리 Class"를 return 하는 식으로~ Bean 정의를 하게 되는것.
      • 해당 Bean의 생성 및 소멸 시, 특정 함수를 실행 할 수 도 있다.
    • @Component
      • 반면, "직접 개발하는 Class"는 @Component라 명시하여~ Bean 정의를 하는것 이다.
      • (@Controller <- @Service <- @Repository ... )
    • @Resource
      • 표준 자바 어노테이션.
      • name 어트리뷰트가 있음.
    • @Autowired 
      • Spring Framework 어노테이션.
      • ApplicationContext 상에서, 정의된 Bean을 찾아~ Dependancy을 만족시키는 수단.
    • @Qualifier
      • 같은 Class으로 복수게의 Bean이 정의된 경우,
      • 특정한 Bean을 명시.
    • @Primary
      • 같은 Class으로 복수게의 Bean이 정의될 경우,
      • 그중에서 최우선 Bean을 정의.
    • @Transactional
      • Class에 걸면, 해당 모든 Method에 Transaction 걸림.
      • Method에 걸면, ...
      • // TODO : 음... 더더더
    • AOP(@Aspect, @Before, @Around, @After, ...)
      • @Aspect
        public class Performance {
        	@Around("execution(* com.blogcode.board.BoardService.getBoards(..))")
        	public Object calculatePerformanceTime(ProceedingJoinPoint proceedingJoinPoint) {
            	Object result = null;
        		try {
        			long start = System.currentTimeMillis();
        			result = proceedingJoinPoint.proceed();
        			long end = System.currentTimeMillis();
        		} catch (Throwable throwable) {
        			System.out.println("exception");
        		}
        		return result;
        	}
        }
    • ...
  • 예제
    • "Spring에서 리소스 다루기"
      • @Autowired
        private ApplicationContext ctx;
        
        Resource resource = ctx.getResource("/resources/html/test.html");
        Resource resource = ctx.getResource("classpath:mapper/test/test.xml");
    • "logback-prod.xml 설정"
      • <?xml version="1.0" encoding="UTF-8"?>
        <configuration>
        	<!-- include resource="org/springframework/boot/logging/logback/base.xml"/-->
        
        	<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        		<file>/test/test.log</file>
        		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        			<fileNamePattern>/test/test.%d{yyyy-MM-dd}.log</fileNamePattern>
        			<maxHistory>7</maxHistory>
        		</rollingPolicy>
        		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        			<charset>UTF-8</charset>
        			<pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} %level [%thread] [%logger{35}:%line] [%X{clientIp}] [%X{mdcKey}] ::: %msg%n</pattern>
        		</encoder>
        	</appender>
        	
        	<appender name="ROLLING_SCH" class="ch.qos.logback.core.rolling.RollingFileAppender">
        		<file>/test/test-sch.log</file>
        		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        			<fileNamePattern>/test/test-sch.%d{yyyy-MM-dd}.log</fileNamePattern>
        			<maxHistory>7</maxHistory>
        		</rollingPolicy>
        		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        			<charset>UTF-8</charset>
        			<pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} %level [%thread] [%logger{35}:%line] [%X{clientIp}] [%X{mdcKey}] ::: %msg%n</pattern>
        		</encoder>
        	</appender>
        	
        	<root level="INFO">
        		<appender-ref ref="ROLLING" />
        	</root>
        	
        	<logger name="org.springframework" level="ERROR"/>
        	<logger name="com.company" level="INFO"/>
        	
        	<!-- logger name="com.company.project.test.XXX" level="INFO" additivity="false">
        		<appender-ref ref="ROLLING_SCH"/>
        	</logger -->
        </configuration>
    • "logback-local.xml 설정"
      • <?xml version="1.0" encoding="UTF-8"?>
        <configuration>
        	<!-- include resource="org/springframework/boot/logging/logback/base.xml"/-->
        	
        	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        			<charset>UTF-8</charset>
                    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] [%logger{35}:%line] [%X{clientIp}] [%X{mdcKey}] ::: %msg%n</pattern>
        		</encoder>
        	</appender>
        	
        	<!-- timestamp key="thetime" datePattern="yyMMddHH"/>
        	<appender name="FILE" class="ch.qos.logback.core.FileAppender">
        		<file>C:\\Users\\Administrator\\Desktop\\file-${thetime}.txt</file>
        		<append>true</append>
          		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        			<charset>UTF-8</charset>
                    <pattern>%msg%n</pattern>
        		</encoder>
        	</appender -->
        	
        	<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
        		<timeout>90 minutes</timeout>
                <maxAppenderCount>2</maxAppenderCount>
        		<discriminator>
        			<key>hourlytime</key>
        			<defaultValue>NA</defaultValue>
        		</discriminator>
            	<sift>
        			<appender name="SIFT-${hourlytime}" class="ch.qos.logback.core.FileAppender">
                		<file>C:\\Users\\Administrator\\Desktop\\sift-${hourlytime}.txt</file>
        				<append>false</append>
        				<layout class="ch.qos.logback.classic.PatternLayout">
        					<charset>UTF-8</charset>
        					<pattern>%msg%n</pattern>
        				</layout>
        			</appender>
        		</sift>
        	</appender>
        	
        	<root level="INFO">
        		<appender-ref ref="CONSOLE" />
        	</root>
        	
        	<logger name="org.springframework" level="INFO"/>
        	<logger name="com.company" level="INFO"/>
        	
        	<!-- logger name="com.company.project.test.XXX" level="INFO" additivity="false">
        		<appender-ref ref="SIFT"/>
        	</logger -->
        </configuration>
    • ...
  • ...

-끝-

'랭귀지&프레임웤' 카테고리의 다른 글

"certificate verify failed: unable to get local issuer certificate"  (0) 2021.05.30
Python 이란?  (0) 2019.11.06
Spring Cloud 란?  (0) 2019.11.06
Spring Batch 란?  (0) 2019.11.06
Spring 개론  (0) 2019.10.30

+ Recent posts