1. 파일 삭제

 - 시스템이 종료될 때 파일 삭제하고 싶음


2. Thread를 생성해서 처리함.

 - jdk1.8 미만

Runtime.getRuntime().addShutdownHook(new Thread() {

@Override
public void run() {
new File("").delete(); //File Delete Code

}
});


 - jdk 1.8 이상

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
new File("").delete(); //File Delete Code
}));

3. Apache Commons-io를 사용

 - 코드 샘플

try {
FileUtils.forceDeleteOnExit(new File("fileName"));
} catch (IOException e) {
e.printStackTrace();
}

 - 메소드

/**
* Schedules a file to be deleted when JVM exits.
* If file is directory delete it and all sub-directories.
*
* @param file file or directory to delete, must not be {@code null}
* @throws NullPointerException if the file is {@code null}
* @throws IOException in case deletion is unsuccessful
*/
public static void forceDeleteOnExit(final File file) throws IOException {
if (file.isDirectory()) {
deleteDirectoryOnExit(file);
} else {
file.deleteOnExit();
}
}


'프로그래밍 > JAVA' 카테고리의 다른 글

AmazonS3Client, deprecated!!!  (0) 2018.05.21
json schema validator 사용하기 - 01  (0) 2018.04.18
시스템 종료 후 File 삭제  (0) 2018.04.12
Java에서 Tuple 사용하기.  (0) 2018.04.11
try-catch-resources  (0) 2018.04.11
public static void main(String[] args){}  (0) 2018.04.03

1. Spring Batch

 1) Spring batch란? 

  - Spring Batch는 Job과 Step으로 구성되어 있음.

  - 하나의 Spring Batch안에는 여러 Job이 존재 할 수 있고, 그 Job 안에는 여러 개의 Step 또는 Tasklet을 존재 할 수 있음.

  - Job -> Step -> ItemReader - ItemProcessor - ItemWriter


#https://docs.spring.io/spring-batch/trunk/reference/htmlsingle/#domain 에서 가져온 이미지 입니다.


  2) 장점

   - 간단하게 대용량 배치를 만들 수 있다.

   - 이미 만들어진 많은 모듈들을 사용해서 손쉽게 구현가능(CSV 파싱, DB에서 가지고 오기, S3 등에 파일업로드 등)

  

  3) 단점

    - 어렵다.(배우면 된다.)


2. Class 설명

  1) ItemReader

  - Step 안에서 데이터를 가져오는 역할을 하는 Class이다.

  - 하나의 아이템이 리턴되거나 null

package org.springframework.batch.item;

/**
* Strategy interface for providing the data. <br>
*
* Implementations are expected to be stateful and will be called multiple times
* for each batch, with each call to {@link #read()} returning a different value
* and finally returning <code>null</code> when all input data is exhausted.<br>
*
* Implementations need <b>not</b> be thread-safe and clients of a {@link ItemReader}
* need to be aware that this is the case.<br>
*
* A richer interface (e.g. with a look ahead or peek) is not feasible because
* we need to support transactions in an asynchronous batch.
*
* @author Rob Harrop
* @author Dave Syer
* @author Lucas Ward
* @since 1.0
*/
public interface ItemReader<T> {

/**
* Reads a piece of input data and advance to the next one. Implementations
* <strong>must</strong> return <code>null</code> at the end of the input
* data set. In a transactional setting, caller might get the same item
* twice from successive calls (or otherwise), if the first call was in a
* transaction that rolled back.
*
* @throws ParseException if there is a problem parsing the current record
* (but the next one may still be valid)
* @throws NonTransientResourceException if there is a fatal exception in
* the underlying resource. After throwing this exception implementations
* should endeavour to return null from subsequent calls to read.
* @throws UnexpectedInputException if there is an uncategorised problem
* with the input data. Assume potentially transient, so subsequent calls to
* read might succeed.
* @throws Exception if an there is a non-specific error.
* @return T the item to be processed
*/
T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException;

}


 2) ItemProcessor

  - Step 안에서 가져온 데이터를 가공하는 역할을 하는 Class이다.

  - Chunk 사이즈 만큼 Item들이 List로 들어온다.

package org.springframework.batch.item;

/**
* Interface for item transformation. Given an item as input, this interface provides
* an extension point which allows for the application of business logic in an item
* oriented processing scenario. It should be noted that while it's possible to return
* a different type than the one provided, it's not strictly necessary. Furthermore,
* returning null indicates that the item should not be continued to be processed.
*
* @author Robert Kasanicky
* @author Dave Syer
*/
public interface ItemProcessor<I, O> {

/**
* Process the provided item, returning a potentially modified or new item for continued
* processing. If the returned result is null, it is assumed that processing of the item
* should not continue.
*
* @param item to be processed
* @return potentially modified or new item for continued processing, null if processing of the
* provided item should not continue.
* @throws Exception
*/
O process(I item) throws Exception;
}


 3) ItemWriter

  - Step 안에서 데이터를 쓰는 역할을 하는 Class이다.

package org.springframework.batch.item;

import java.util.List;

/**
* <p>
* Basic interface for generic output operations. Class implementing this
* interface will be responsible for serializing objects as necessary.
* Generally, it is responsibility of implementing class to decide which
* technology to use for mapping and how it should be configured.
* </p>
*
* <p>
* The write method is responsible for making sure that any internal buffers are
* flushed. If a transaction is active it will also usually be necessary to
* discard the output on a subsequent rollback. The resource to which the writer
* is sending data should normally be able to handle this itself.
* </p>
*
* @author Dave Syer
* @author Lucas Ward
*/
public interface ItemWriter<T> {

/**
* Process the supplied data element. Will not be called with any null items
* in normal operation.
*
* @param items items to be written
* @throws Exception if there are errors. The framework will catch the
* exception and convert or rethrow it as appropriate.
*/
void write(List<? extends T> items) throws Exception;

}


3. 간단 용어 설명

  1) Item 

   - 데이터의 가장 작은 구성 요소를 말함.


 2) Chunk

   - commit-interval

   - ItemReader 읽은 데이터를 Processor 통해 가공 한 후 ItemWriter 넘겨지는 갯수를 의미함.

   - 트랜젝션이 걸려 있다면 한 트랜젝션 안에서 처리할 Item의 수이다.


4. 옵션

     (1) 옵션 설명

- spring.batch.initializer.enabled : Spring Batch 실행시에 Database 내 Table create 등 실행여부

- spring.batch.job.enabled : Spring Batch 실행시에 Context내 모든 Job들 실행 여부

- spring.batch.job.names : 실행할 Job 리스트, 콤마(,)로 구분한다.

- spring.batch.schema : db 스키마 초기화 sql파일 위치 (바로가기)

- spring.batch.table-prefix : 테이블명 앞에 붙일 명칭


     (2) 설정

  - application.properties

spring.batch.initializer.enabled=false
spring.batch.job.enabled=false
spring.batch.job.names=test1,test2,test3
spring.batch.schema=org/springframework/batch/core/schema-h2.sql
spring.batch.table-prefix=tmp_


  - application.yml

spring:
batch:
schema: org/springframework/batch/core/schema-h2.sql
table-prefix: tmp_
initializer:
enabled: false
job:
enabled: false
names: test1,test2,test3


* 참고페이지

 - https://projects.spring.io/spring-batch/

 - https://docs.spring.io/spring-batch/3.0.x/reference/html/index.html

 - https://docs.spring.io/spring-batch/trunk/reference/html/listOfReadersAndWriters.html


1. Tuple

 - 간단하게 만들어서 쓰고 싶다....


2. 소스

 - Tuple class


3. 라이브러리

 - jdk 7부터 javafx.util.Pair class 추가됨.

 - Common Lang 패키지 내에 있는 (org.apache.commons.lang3.tuple.Pair<L,R>)

 - https://www.javatuples.org/ 

1. try-catch-resources

 - try (...) 안에 선언된 입출력 스트림 등의 리소스 객체의 'close()' 메소드를 호출해줌. 자원관리를 잘 해줌.

 - java 7 에서 추가된 기능.


2. 소스 비교

 1) 1.6 이전

FileInputStream fs = null;
try {
fs = new FileInputStream("file.txt");

} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
if (fs != null) {
try {
fs.close();
} catch (IOException e1) {
System.out.println(e1.getMessage());
}
}
}

 2) 1.7 이상

  - 단, 인터페이스인 java.lang.AutoCloseable를 구현해야 사용가능함.

  - 귀찮은 finally 안에 소스를 안만들어도 된다. 

try (FileInputStream fs = new FileInputStream("file.txt");) {

} catch (IOException e) {
System.out.println(e.getMessage());
}

 - 커스텀하게 구현할 수도 있다.

public class CustomFileInputStream implements AutoCloseable {

@Override
public void close() throws Exception {

}
}

3. Close 동작 확인

 1) 정상 동작시에 Close 메소드 호출 여부 확인

(1) 샘플 소스 확인

 - 실행 시킬 Main Class

public class Sample {

public static void main(String[] args) throws Exception {

try (CustomFileInputStream cfs = new CustomFileInputStream()) {
System.out.println("Try 안에 호출 잘 됩니다.");

} catch (Exception e) {
System.out.println("에외가 발생했습니다.");

}

System.out.println("완료!");
}

}


 - Custom한 Class

/**
* Custom 메소드
*
* @author akageun
*/
public class CustomFileInputStream implements AutoCloseable {

@Override
public void close() throws Exception {
System.out.println("Close 메소드가 호출 되었습니다.");
}
}

(2) 결과



 2) 예외가 발생 했을 때 Close 메소드 호출 여부 확인

(1) 샘플 소스 확인

 - 실행 시킬 Main Class

public class Sample {

public static void main(String[] args) throws Exception {

try (CustomFileInputStream cfs = new CustomFileInputStream()) {
System.out.println("Try 안에 호출 잘 됩니다.");
throw new RuntimeException("테스트 예외 호출 ");


} catch (Exception e) {
System.out.println("에외가 발생했습니다. " + e.getMessage());

}

System.out.println("완료!");
}

}

 - Custom한 Class는 위에 Class와 동일한걸로 사용

(2) 결과

 

1. Twitter

 1) input 소스

input {  

    twitter {

        consumer_key => "CONSUMER_KEY_GOES_HERE"

        consumer_secret => "CONSUMER_SECRET_GOES_HERE"

        oauth_token => "ACCESS_TOKEN_GOES_HERE"

        oauth_token_secret => "ACCESS_TOKEN_SECRET_GOES_HERE"

        keywords => ["test","sample"]

        full_tweet => true

    }

}


 2) 참고링크

 - https://www.elastic.co/guide/en/logstash/current/plugins-inputs-twitter.html


2. Json_Line

 1) 설치

bin/logstash-plugin list json_line

./bin/logstash-plugin install logstash-codec-json_lines


 2) 소스

output {

  stdout { codec => json_lines }

}


 3) 참고링크

  - https://www.elastic.co/guide/en/logstash/current/plugins-codecs-json_lines.html#plugins-codecs-json_lines

  - https://github.com/logstash-plugins/logstash-codec-json_lines


3. RSS

 1) 설치

./logstash-plugin install logstash-input-rss


 2) 소스

input {

        rss {

                interval => 300

                url => "https://rss.itunes.apple.com/api/v1/kr/ios-apps/top-grossing/all/100/explicit.rss"

        }

}









 


1. Atom(https://atom.io/) 이란?

 - Github에서 기여한 오픈소스

 - 텍스트 에디터


2. Atom 장점

 - 오픈소스다.

 - package가 많아 확장성이 좋다. 또 package 개발이 쉽다.

 - github과 연동하기가 쉽다.

 - 여러 프로그래밍 언어 편집이 참! 쉽다.(텍스트 에디터니까??)

 - 여러 플랫폼에서(Osx, Linux, Windows) 설치가 가능하다.


 등등등~


3. windows에서 설치

 - https://atom.io/ 에서 "윈도우즈용 다운로드" 

 - 다운 받은 파일을 실행시키면 바로 설치 후 실행된다.


4. OSX에서 설치

 - https://atom.io/ 에서 "Mac용 다운로드" 

 - dmg 파일이 아닌 zip파일로 다운로드 됨.

 - 압축 풀면 Atom.app을 응용프로그램 디렉토리에 넣으면 됨.



'OpenSource > Others' 카테고리의 다른 글

[Atom] 사용해보기. part. 1 : 설치(win, mac)  (0) 2018.04.10
[Readmine] 1. 설치하기(linux)  (0) 2017.01.26
[Ghost] 1. Ghost Blog 소개 및 설치  (0) 2016.08.06

1. Filter Mutate??

 - 데이터 변환


2. 기능

 - remove_field : 해당 필드 값들을 제거한다.

 - rename : 필드명을 변경한다.

 - 기타 여러 기능들이 있다. 아래 참고링크를 참고하면 좋다.


3. 예제

filter {

mutate {

remove_field => [

"@timestamp",

"@version"

]

rename => {

"TEST_VALUE" => "testValue"

}

}

}


* 참고 링크

 - https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-rename

1. 프로젝트 세팅하기

 1) 참고

  - Maven 버전이 3버전 이상이여야 합니다.

  - IntelliJ 로 개발할 예정입니다.

 2) 세팅

     (1) maven-archetype-mojo 를 선택한다.




(2) 관련 정보를 입력한다.

      - GroupId : 그룹 아이디로 패키지와 일치시켜서 입력한다.

  - ArtifactId : 플러그인 이름으로 규칙이있다.

* maven-${name}-plugin : Maven에서 자체 개발한 플로그인 이름으로, 사용할 수 없다.

* ${name}-maven-plugin : Custom Plugin 명칭으로 해당 룰에 맞춰서 플러그인 이름을 만들면 된다.


(3) 관련 정보 확인.



(4) 생성된 패키지 확인



(5) pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kr.geun.o</groupId>
<artifactId>sample-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>
<version>1.0-SNAPSHOT</version>
<name>sample Maven Mojo</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5.1</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>


(6) MyMojo.java <-- 클래스명은 변경해도 됩니다.

 - 아래에 있는 @Mojo(name = "sample") 은 Maven plugin의 Goal 입니다.

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;

@Mojo(name = "sample")
public class MyMojo extends AbstractMojo {

public void execute() throws MojoExecutionException {
getLog().info("Hello, World!!");
}
}

 3) 빌드하기

mvn clean install


2. 테스트용 프로젝트 세팅

 1) 신규로 프로젝트를 Maven 프로젝트를 세팅한다. 

  


 2) pom.xml 내에 추가

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>kr.geun.mvn.test</groupId>
<artifactId>sample-mvn-plugin-test</artifactId>
<version>1.0-SNAPSHOT</version>

<build>
<plugins>
<plugin>
<groupId>kr.geun.mvn.plgn</groupId>
<artifactId>sample-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
</plugin>
</plugins>
</build>
</project>


 3) 실행

 - mvn {groupId}:{artifactId}:{version}:{plugin Goal}

mvn kr.geun.mvn.plgn:sample-maven-plugin:1.0-SNAPSHOT:sample


or

 - mvn {artifactId} 내에 있는 prefix값 (예를들어 위 내용에서는 sample이다):{plugin Goal}

mvn sample:sample



 4) 결과



* 참고 링크

 - http://maven.apache.org/guides/plugin/guide-java-plugin-development.html


'프로그래밍 > Maven' 카테고리의 다른 글

Maven Test Skip 하는 법  (0) 2018.04.17
[Maven] Plugin 개발하기.  (0) 2018.04.09
Maven Central에 Library Upload하기!!  (0) 2017.02.21
[MAVEN] Exec Maven Plugin 사용하기  (0) 2016.12.01

1. HTML 기본구조

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>

</body>
</html>


2. <html lang="en"> ??

 - HTML 이 어떤 언어로 작성되어 있는지를 알려주는 값이다.

 - ISO 639-1 Language Codes  : 링크

 - 번역하기 등의 옵션은 해당 lang값을 참고하여 동작함.



'프로그래밍 > html & css' 카테고리의 다른 글

Bootstrap 사용하기  (0) 2018.08.08
textarea 리사이즈 관련  (0) 2018.07.16
radio, checkbox clear 버튼 만들기.  (0) 2018.04.25
<html lang="ko">  (0) 2018.04.09
html tag(select box, checkbox) Readonly(?)처럼 사용하기  (0) 2018.03.08

1. 최대 접속자 수

show variables like '%max_connect%';


2. 현재 접속자 수

show global status like 'threads_connected';


3. 현재 존재하는 데이터베이스 목록

show databases;


4. 특정 데이타베이스를 사용

use {databases_name};


5. 현재 사용중인 데이터베이스 테이블 목록

show tables;


6. 테이블 생성 쿼리 보기

show create table {table_name};


7. 테이블 컬럼 목록 보기

select column_name from information_schema.columns where table_name = '{table_name}' and table_schema='{database_name}'


8. 테이블 index 목록 보기

show index from {table_name}


9. 현재 사용중인 데이터베이스 인덱스 목록

select distinct table_name, index_name from information_schema.statistics where table_schema = '{database_name}';


10. TABLE Comment 확인

select 

table_name, table_comment 

from information_schema.tables

where 

table_schema = '{database_name}'


11. TABLE 내 Column Comment 확인

select 

table_name, column_name,column_comment 

from information_schema.columns

where 

table_schema = '{database_name}'


'DataBase > Mysql & MariaDB' 카테고리의 다른 글

원격접속하기.  (0) 2018.08.24
현재 접속 계정 보기.  (0) 2018.08.23
[Mysql] Create Table like  (0) 2018.04.13
[Mysql] 기억하면 좋은 쿼리 모음  (0) 2018.04.03
[Mysql] 데이터의 암호화, 복호화  (0) 2016.11.17
[Mysql]ERROR 1045 (28000)  (0) 2016.08.23

+ Recent posts