반응형

LocalDateTime 기본으로 적용되는 날짜표시 포맷

2021-07-06T14:32:27.002333

저 T는 날짜 뒤에 시간이 온다는 것을 알려주는 ISO 날짜 형식이라고 함..

저 T를 포함한.. 밀리세컨드등이 너무 거슬려서... LocalDateTime format을 바꾸려고 함..

 


LocalDateTime의 format을 지정해주는 기본 형식

String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));

 


  • BaseTimeEntity 원래 코드
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;
}
  • DB 컬럼 Data Type : DATETIME

 

 

변수에 바로 대입해봤는데..

@CreatedDate
private String createdDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));

@LastModifiedDate
private String modifiedDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
  • DB 컬럼 Data Type : VARCHAR 으로 변경

 

기존에 나오던 거랑은 다른데 내가 넣은 형식이 적용이 안 되고 

마음대로 이렇게 나와버려.. 정말웃겨 ...

21. 7. 6. 오후 4:08

 


Entity Listen을 이용한 BaseTimeEntity 코드

아래와 같이 Entity Listener를  사용하니 원하는 날짜값이 원하는 형식대로 적용되었다.

  • DB 컬럼 Data Type : VARCHAR
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {


    @CreatedDate
    private String createdDate;

    @LastModifiedDate
    private String modifiedDate;

    @PrePersist
    public void onPrePersist(){
        this.createdDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
        this.modifiedDate = this.createdDate;
    }

    @PreUpdate
    public void onPreUpdate(){
    this.modifiedDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
    }

}

 

  • @PrePersist : 엔티티 insert 이전 실행
  • @PreUpdate : 엔티티 update 이전 실행

 


ISO 날짜 형식 참고

 

[ISO] ISO 8601 개념

ISO 날짜 형식이란? 정식 명칭 Date elements and interchange formats - Information interchange - Representation of dates and times 미쳤다.. 현재 제일 최신 버전 ISO 8601 구버전 IS..

java119.tistory.com

 

format 변경 참고

 

JPA 생성 일시 , 변경 일시 format 변경 하는 부분 정리

Auditing을 이용해서 공통으로 등록일과 수정일을 가져와 사용하는 형태로 만들면서 DB 쪽 설계가 char(14) 형태로 나왔다. 이 부분에 대해 얘기를 하였으나 기존 시스템과의 연계 때문에 어쩔수 없

kimseungjae.tistory.com

 

Entity Listener 참고

 

데이터 변경 알림 - @EntityListeners

spring 의 data-jpa 사용시 데이터 변경시 알림을 받는 방법이 있다. EntityListener 클래스를 만들고 public class DataDtoListener { @PostLoad public void postLoad(DataDto dto) { log.info("post load: {}",..

erim1005.tistory.com

 

반응형
반응형

Driver org.mariadb.jdbc.Driver claims to not accept jdbcUrl 에러 자꾸 뜸

근데 뒤에 url 이름이 내가 설정한 maria db url이 아님

 

  • 내가 사용하는 profile : real
  • application-real-db-properties에 database url 명시되어있음

 

  • build.gradle에서 mariadb 드라이버 추가되어있음

 

 

application.properties에 명시된 이 hikarl.jdbc-url 때문이었음.

application.properties가 공통 속성 설정이라 이 url을 사용해서 그런거였음

 

주석처리하니 잘 됨.

반응형
반응형

2021.1.2 Community Edition 사용


1. 오른쪽 상단 Application > Edit Configurations

 

2. Modify options > Add VM options

 

3. VM options란이 생성되면 

-Dspring.profiles.active='profile이름' 입력

 

Apply하고 OK, start 하면 로그에 적용된 profile이 보인당

반응형
반응형

yum 으로 패키지 설치 시 

packages excluded due to repository priority protections  에러

 

priorities plugin 때문이라는데..

/etc/yum/pluginconf.d/priorities.conf 파일의 내용을

enabled = 0 으로 수정해주면 된다. 

반응형
반응형

fetch 사용해보기


fetch() 기본

//fetch를 호출하면 브라우저는 네트워크 요청을 보내고 promise를 반환한다.
let promise = fetch(url, {options})
fetch(url, options)
	//api호출 성공 시 응답(response) 반환
  .then((response) => console.log("response:", response))
	//실패시 error 반환
  .catch((error) => console.log("error:", error));

 

fetch  사용 예시

    fetch("https://localhost:8080/urlurl", {
        method: 'POST',
        mode: 'cors',
        cache: 'no-cache', 
        credentials: 'same-origin',
        headers: {
            'Content-Type': 'application/json',
        },
        redirect: 'follow', 
        referrer: 'no-referrer',
        body: JSON.stringify(obj),
    })//fetch 실행이 끝나면 then의 내용 실행
    //응답을 JSON 형태로 파싱한다
    .then(response => response.json()) 
    .then(function (res){
    
    })

 

응답을 처리할 때 사용하는 메서드

response.text() 응답을 읽고 텍스트를 반환
response.json() 응답을 JSON 형태로 파싱
response.formData() 응답을 FormData 객체 형태로 반환
response.blob() 응답을 Blob(타입이 있는 바이너리 데이터) 형태로 반환
response.arrayBuffer() 응답을 ArrayBuffer(바이너리 데이터를 로우 레벨 형식으로 표현한 것) 형태로 반환

* 본문을 읽을 때 사용되는 메서드는 딱 하나만 사용할 수 있다.

let text = await response.text(); // 응답 본문을 읽고 test를 반환
let parsed = await response.json(); // 실패
반응형
반응형

1. 날짜 구하기

//오늘날짜 구하기
var date = new Date(); 

//년도 구하기.. ex)2022
var year = date.getFullYear(); 

//월 구하기.. 0~11이므로 1을 더해주고 한자리수면 앞에 0을 붙여줌 ex)08
var month = date.getMonth()+1 < 10? "0".concat(date.getMonth()+1) : date.getMonth()+1;

//일 구하기.. ex)11
var day = date.getDate(); 

//결과 : 2022-08-11
$('date').value = year+'-'+month+'-'+day;

 

2. 날짜 계산

var sdate = new Date();
sdate.setDate(sdate.getDate()-31);	
sdate.setMonth(sdate.getMonth()+2);
sdate.setYear(sdate.getYear()-1);

 

 

3. 날짜값 반환하는 함수

Date.prototype 으로 Date함수의 값을 커스텀해서 반환한다.

Date.prototype.myCustom = function () {
  var yyyy = this.getFullYear().toString();
  var mm = (this.getMonth() + 1).toString();
  var dd = this.getDate().toString();
  var hh = this.getHours().toString();
  var ii = this.getMinutes().toString();
  return (
    yyyy +
    "-" +
    (mm[1] ? mm : "0" + mm[0]) +
    "-" +
    (dd[1] ? dd : "0" + dd[0]) +
    "  " +
    (hh[1] ? hh : "0" + hh[0]) +
    ":" +
    (ii[1] ? ii : "0" + ii[0])
  );
};


//함수 사용하기 
let updateTime = new Date().myCustom();

변수를 출력하면 내가 지정한 형식의 날짜가 표시된다.

 

반응형
반응형

셋 중에 하나를 이용

$('#Iframe').bind('load',function () {

});
$("#Iframe").load(function () {

  });
$("#Iframe").ready(function(){

 });

 

예시

iframe 로딩이 되는 동안 프로그레스 바를 표시,

로딩 완료후 숨김

//로더 표시
$(".loader").show();

//로더 숨김
$("#reportIframe").load(function () {
    $(".loader").hide();
  });
반응형
반응형

1. spring 프로젝트 생성

https://start.spring.io/

이 링크에서 아래와 같이 선택하여 Spring 프로젝트를 생성

 

  • Maven / Gradle : 필요한 라이브러리를 땡겨오거나 빌드 라이프사이클을 관리한다.
  • Spring Boot 버전 선택 : SNAPSHOT은 만들고 있는 버전이므로 완성된 버전을 선택
  • Dependencies : 라이브러리 선택
  • Thymeleaf : HTML 템플릿 엔진
  • Spring Web : tomcat을 포함함

GENERATE를 누르면 내가 지정한 이름으로 zip파일이 다운로드 된다.

압축 파일을 풀고 진행


2. Intellij 다운 및 열기

https://www.jetbrains.com/ko-kr/idea/download/#section=windows

community 버전으로 설치 

설치 완료 후 Intellij를 열고 Open을 눌러 프로젝트 열기 

build.gradle 선택하여 OK > Open as Project > Trust Project

하면 프로젝트가 열린다

창 밑의 바에서 sync 작업이 열심히 진행중이니 다 될때까지 기다린다.  

기다리지 않고 run을 누르면

여기서 수동으로 configuration을 자꾸 하라고 뜨게되니 완료될 때까지 기다려야함.

 

터미널이 안 보이는 경우 아래 버튼을 이것저것 눌러보자 

 

 

완료 후 src > main > java > 밑의 Application java 파일을 열어보면

코드 옆에 ▶ 가 자동 생성된다.

눌러보면 실행됨.

run configuration은 sync 작업이 완료되면 자동 생성된다

 

 

실행했을 때 

Could not target platform: 'Java SE 11' using tool chain: 'JDK 8 (1.8)'. 

가 뜨는 경우

spring 프로젝트를 java 11 버전으로 만들어놓고

시스템엔 8버전이 있어서 11을 못 찾아서 그렇슴


3. JAVA 11 설치 및 세팅

https://www.oracle.com/kr/java/technologies/javase-jdk11-downloads.html

다운로드 후 . . .

내 PC > 우클릭 속성 >

고급 시스템 설정 > 환경변수 >

편집을 눌러 JAVA_HOME 시스템 변수를 jdk-11로 맞춰주자

 

3-1  Intellij Project Structure 세팅

Ctrl + Alt + Shift + S  혹은 좌측 상단 File > Project Structure

Project SDK 를 11version으로 세팅 

 

 

3-2 Gradle 세팅

build.gradle 파일에 11버전으로 표시되어있는지 확인.

 

 

Ctrl + Alt + S 혹은 좌측 상단 File > Settings 

gradle을 검색하여 gradle 메뉴 클릭

  • Gradle JVM  : JAVA_HOME 11version으로 선택
  • Build and rung using & Rung tests using : Intellij 로 하면 조금 더 실행속도가 빠르다고 한다.

 

 


실행

반응형
반응형

test라는 dom에 click이벤트가 걸린 상황.

 

이 경우에 click 이벤트가 중복으로 걸려서 

횟수가 x2 되어 실행된다.

또 누를 경우 x2 되어 4번.. 8번...

중복을 막기위해 .off를 추가해주자 

function func1(){

  $(document).off("click", "#test").on("click", "#test", function () {
    func1();
  });
    
}
반응형
반응형
$("#table").DataTable().destroy(); //이전에 만든 것 없애고 다시 그리기 위함.
const table = $("#table").DataTable({
          responsive: false,  //반응형 설정
          pageLength: 10,     //페이지 당 글 개수 설정
          autoWidth: false,
          destroy: true,
          processing: true,
          serverSide: false,
          searching: false,    //검색란 표시 설정
          ordering: true,      //글 순서 설정
          paging: true,        //페이징 표시 설정
          dom: "Blfrtip",      //버튼 dom 설정 l을 추가하면 pagelength 드롭다운 표시
          buttons: [
            {
              extend: "excel",
              text: "엑셀 다운로드",
              filename: function () {
                if ($("#file1").val() === "a1") {
                  return "_"+$("#file1").val();
                } else {
                  return "file2";
                }
              },

              customize: function (xlsx) {
              //엑셀 셀 커스텀
                var sheet = xlsx.xl.worksheets["sheet1.xml"];
                $("c[r=B2] t", sheet).text("custom text1");
                $("c[r=C2] t", sheet).text("custom text2");
 
              },
            },
          ],
          language: {
            emptyTable: "데이터가 없습니다.",
            lengthMenu: "페이지당 _MENU_ 개씩 보기",
            info: "현재 _START_ - _END_ / _TOTAL_건",
            infoEmpty: "데이터 없음",
            infoFiltered: "( _MAX_건의 데이터에서 필터링됨 )",
            search: "",
            zeroRecords: "일치하는 데이터가 없습니다.",
            loadingRecords: "로딩중...",
            processing: "잠시만 기다려 주세요.",
            paginate: {
              next: "다음",
              previous: "이전",
            },
          },
          data: chartDataList,
          columns: [
            { data: "data1" },
            { data: "data2" },
            { data: "data3" },
            { data: "data4" },
          ],
          columnDefs: [
            {//0번컬럼 설정
              targets: 0,
              orderable : false,
              render: function (data) {
                if ($("#searchType").val() === "day") {
                  return data + "시";
                } else {
                  return data;
                }
              },
            },
            {//1번,2번컬럼 설정
              targets: [1,2],
              visible: false,
              orderable : false,
              render: function (data) {
              	return data;      
              },
            },
            {//모든 컬럼 설정
              targets: "_all",
              render: function (data, type, full, meta) {
              	console.log(data); // 데이터중 해당 열, 행에 들어갈 data
                console.log(type); 
                console.log(full); // 데이터중 해당 행에 들어갈 full data
                console.log(meta); // 해당 셀의 row, col 번호
              },
            },
          ],
        });
        
//데이터 테이블 필터링하여 보여주기 설정
//필터링 할 컬럼 번호로 search 이용
table.column(0).search("value").draw();
반응형

+ Recent posts