반응형

스프링부트에서 간단하게 사용할 수 있는 캐시 사용법입니다.


서비스 레이어에서 예를 들어 아래와 같은 코드를 사용할 수 있습니다.

@Cacheable 어노테이션을 통해 캐시할 대상을 지정하고 value는 어떤 캐시정책을 쓸 것인가에 대한 값이고 key는 지정한 캐시 정책내애서 캐시를 구분해주는 키값 입니다.


@CacheEvict 어노테이션은 value로 매칭되는 @Cacheable에 캐시되었던 데이터를 지워줄 대상을 지정합니다.

마찬가지로 key는 해당 캐시정책에서 특정 키에 해당하는 데이터만 지웁니다.


혹은 여러 캐시를 모두 지우고 싶은 경우 마지막 메서드처럼 하면 됩니다.



  import org.springframework.cache.annotation.CacheEvict;
  import org.springframework.cache.annotation.Cacheable;
  import org.springframework.cache.annotation.Caching;
 
  @Cacheable(value = "user", key = "#root.methodName + #userId")
  public String getUser(String userId, PrettyLog prettyLog) {
    return userDao.selectOne(userId, prettyLog);
  }
 
 @CacheEvict(value = "user", key = "#root.methodName + #userId")
  public void clearCacheUser(String userId, PrettyLog prettyLog) {
  }
 
  @Caching(evict = { //
      @CacheEvict(value = "user", allEntries = true), //
      @CacheEvict(value = "common", allEntries = true)//
  })
  public void clearCacheUser(PrettyLog prettyLog) {
  }



스프링부트에서 위 소스를 동작하게하려면 @EnableCaching 을 메인에서 지정해줘야 합니다.


import org.springframework.boot.SpringApplication;
import org.springframework.cache.annotation.EnableCaching;
 
@SpringBootApplication
@EnableCaching
public class MainApplication {
 
  public static void main(String[] args) {
    SpringApplication.run(MainApplication.class, args);
  }
}




ehcache.xml 파일입니다. (기본은 클래스패스 최상위에두면 자동으로 인식합니다.)

캐시정책을 정의합니다. 서비스레이어에서 value 해당하는 값이 아래의 cache name에 매칭됩니다.


timeToIdleSeconds : 몇초동안사용되지않으면 지울지

timeToLiveSeconds : 몇초동안만 살아있을지

maxBytesLocalHeap : 최대 메모리 사이즈

eternal : true면 timeout 관련설정을 무시하고 캐시를 지우지않는다.


2.5.2 에서 Deprecate 되었다.

maxElmentsInMemory : 메모리에 저장할 최대 개수



2.5.2 이후 2.x 버전

maxEntriesLocalHeap



<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false">
    <diskStore path="java.io.tmpdir" />
    <defaultCache 
    maxEntriesLocalHeap="10000" 
    eternal="false"
        timeToIdleSeconds="120" 
        timeToLiveSeconds="120" 
        overflowToDisk="true"
        maxElementsOnDisk="10000000" 
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120" 
        memoryStoreEvictionPolicy="LRU" />
    <cache name="user" 
    maxEntriesLocalHeap="1000"
    maxBytesLocalHeap="100m" 
    eternal="false"
    timeToIdleSeconds="360" 
    timeToLiveSeconds="" 
    overflowToDisk="false"
    memoryStoreEvictionPolicy="LRU" />
</ehcache>




마지막으로 캐시를 사용하기위한 메이븐 설정입니다.


    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    <dependency>
      <groupId>net.sf.ehcache.internal</groupId>
      <artifactId>ehcache-core</artifactId>
      <version>2.10.1</version>
      <scope>provided</scope>
    </dependency>



반응형

'java' 카테고리의 다른 글

spring boot - spring.log 남기지 않기.  (0) 2018.02.21
java poi excel write 엑셀 쓰기  (0) 2018.01.29
java 전화번호 형식 변환  (7) 2018.01.23
spring security cache control  (0) 2018.01.16
spring 301 redirect - RedirectView  (0) 2018.01.09
java md5  (0) 2017.12.26
LRU LFU FIFO 알고리즘  (0) 2017.12.19
java - collections sort  (0) 2017.12.06
반응형

스프링 web mvc 를 쓰면서 301 리다이렉트를 구현할 때 아래 코드를 참조하세요.


  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.servlet.view.RedirectView;
  
  @RequestMapping(method = RequestMethod.GET, value = "/test")
  public RedirectView test() {
    redirectUrl= "http://googl.com";
    RedirectView redirectView = new RedirectView(redirectUrl);
    redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
    return redirectView ;
  }
cs


반응형

'java' 카테고리의 다른 글

java poi excel write 엑셀 쓰기  (0) 2018.01.29
java 전화번호 형식 변환  (7) 2018.01.23
spring security cache control  (0) 2018.01.16
spring boot cache  (0) 2018.01.16
java md5  (0) 2017.12.26
LRU LFU FIFO 알고리즘  (0) 2017.12.19
java - collections sort  (0) 2017.12.06
java domain cache off  (0) 2017.11.28
반응형

md5 hashing in java


자바에서 md5 처리 방법입니다. 요즘에는 암호화 알고리즘으로는 사용하지 않고, 해쉬값이 필요한 경우에 사용할 수 있습니다.


1
2
3
4
5
6
  public static String md5(String src) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(src.getBytes());
    byte[] digest = md.digest();
    return DatatypeConverter.printHexBinary(digest).toUpperCase();
  }
cs



참고.

1
2
3
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;
cs


반응형

'java' 카테고리의 다른 글

java 전화번호 형식 변환  (7) 2018.01.23
spring security cache control  (0) 2018.01.16
spring boot cache  (0) 2018.01.16
spring 301 redirect - RedirectView  (0) 2018.01.09
LRU LFU FIFO 알고리즘  (0) 2017.12.19
java - collections sort  (0) 2017.12.06
java domain cache off  (0) 2017.11.28
spring boot hotdeploy reload livereload fastboot (spring boot dev devtools)  (0) 2017.11.26
반응형

페이지 알고리즘이라고 하는데 java 에서는 캐시 정책으로 많이 쓰이고 있습니다.


간단명료하게 정리해 보았습니다.


 - LRU : 사용된지 오래된 순으로 삭제

 - FIFO : 저장된지 오래된 순으로 삭제

 - LFU : 사용횟수가 가장 적은 순으로 삭제


반응형
반응형


Collections.sort 로 목록 정렬하기 소스 입니다. Comparator를 이용해 커스터마이징 할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
public class Test {
  public static void main(String[] args) {
    List<Car> carList = new ArrayList<Car>();
    carList.add(new Car(90));
    carList.add(new Car(10));
    carList.add(new Car(30));
    System.out.println("BEFORE---");
    carList.forEach(System.out::println);
    
    Comparator<Car> o = new Comparator<Car>() {
      @Override
      public int compare(Car o1, Car o2) {
        return o2.getSpeed().compareTo(o1.getSpeed()); // 큰게 먼저 오게
      }
    };
    Collections.sort(carList, o);
    System.out.println("AFTER---");
    carList.forEach(System.out::println);
  }
 
}
 
class Car {
  public Car(Integer speed) {
    this.speed = speed;
  }
 
  private Integer speed;
 
  public Integer getSpeed() {
    return speed;
  }
 
  public void setSpeed(Integer speed) {
    this.speed = speed;
  }
 
  @Override
  public String toString() {
    return String.valueOf(this.speed);
  }
 
}
 
cs


위 소스 결과 입니다.


1
2
3
4
5
6
7
8
9
BEFORE---
90
10
30
AFTER---
90
30
10
 
cs


반응형
반응형
$JAVA_HOME/jre/lib/security/java.security 설정파일에 “networkaddress.cache.ttl=0” 설정


반응형
반응형

스프링부트 환경에서 개발할 때 java나 jsp를 수정해도 웹에 실시간으로 반영되지 않고,

restart를 해야 반영이됩니다.


일일이 restart 하기 귀찮을 때 아래 내용을 적용해 주시면, local compile이 일어날 떄마다

자동으로 fast boot가 일어 납니다.


간단한 프로젝트를 개발하면서 사용하고 있는데 정말 빨리 재기동 되어서 쓸만합니다.

소스가 많은 복잡한 프로젝트에서 쓰기는 좀 어려울 것 같기도 합니다.



pom.xml

1
2
3
4
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
    </dependency>
cs


application.properties

1
spring.devtools.livereload.enabled=true
cs


반응형
반응형

개발중인 프로젝트의 경로를 알고 싶을 때 간단하게 아래코드를 이용할 수 있습니다.


1
System.getProperty("user.dir")
cs



예제

1
2
3
public static void main(String[] args) {
    System.out.println(System.getProperty("user.dir"));
}
cs


결과

1
2
C:\project\workspace\project
 
cs


반응형
반응형

KG이니시스 결제 취소  오류 시 아래와 같이 오류가 발생하는 경우,

xalan.jar 라이브러리를 클래스패스에 추가해주면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xpath/XPathAPI
    at com.inicis.util.XMLUtil.getAllValues(XMLUtil.java:541)
    at com.inicis.inipay.actions.INIcancelAction.parseMessage(INIcancelAction.java:260)
    at com.inicis.inipay.INIpay.startAction(INIpay.java:166)
    at kr.go.seoul.scc.core.util.InipayCancelUtil.cancel(InipayCancelUtil.java:54)
    at kr.go.seoul.scc.core.util.InipayCancelUtil.main(InipayCancelUtil.java:10)
Caused by: java.lang.ClassNotFoundException: org.apache.xpath.XPathAPI
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 5 more
 
cs


반응형
반응형

도메인의 IP 를 알아낸 java 코드입니다.


1
2
3
4
5
  public static void main(String[] args) throws UnknownHostException {
    InetAddress giriAddress = java.net.InetAddress.getByName("www.naver.com");
    String address = giriAddress.getHostAddress();
    System.out.println(address);
  }
cs


* 결과 *


1
202.179.177.21
cs


반응형

+ Recent posts