- 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
- ...
- New -> Maven Project -> (maven-archetype-quickstart)
- 어노테이션
- @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; } }
-
- ...
- @Import
- 예제
- "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>
-
- ...
- "Spring에서 리소스 다루기"
- ...
-끝-
'랭귀지&프레임웤' 카테고리의 다른 글
"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 |