2017년 1월 23일 월요일

Document 가 Load 된 후에 Script Library ready 상태에서 실행 해야 할때 .


Jquery 의 $.ready 와  같이 Document 가 Load 되었는지 여부 판단 하에 스크립트를 실행 할 수 있다?

    (function() {
        window.d$={};
        d$Handlers = [];
        d$.ready = function ready(handler) {
            d$Handlers.push(handler);
            handleState();
        };
        handleState = function handleState () {
            if (['complete'].indexOf(document.readyState) > -1) {
                while(d$Handlers.length > 0) {
                    (d$Handlers.shift())();
                }
            }
        };
        document.onreadystatechange = handleState;
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
     
        // 새로고침시 스크립트 캐쉬를 지우기 위해 버전을 달아 준다.
        s.src = 'http://localhost:8080/js/code.js?dc=' + Math.random(1);
        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
    })();

d$.ready(function(){
// code.js 가 Load 된 후 code js 에 선언된 d$ 관련 내용을 이용하여
// 라이브러리가 ready 상태에서 스크립트를 실행 해야 할때.
// 여기에 작성 하면 잘 돌아 간다.
});

2017년 1월 18일 수요일

Java Config에서 파일 업로드 설정.



Servlet3.0 ? Spring 4.3 ? 

무슨 이유인지 모르겠지만 파일 업로드 설정 부분이 바뀐것 같다.
난생 처음 셋팅을 하면서 첨 난관이 많은거 같다.

WebMvcConfigurationSupport 를 상속 받은 ServletContext 영역에 아래의 코드를 넣어 multipart 설정을 한다.



private static final String LOCATION = "C:/mytemp/"; // Temporary location where files will be stored

private static final long MAX_FILE_SIZE = 5242880; // 5MB : Max file size.
private static final long MAX_REQUEST_SIZE = 20971520; // 20MB : Total request size containing Multi part.
private static final int FILE_SIZE_THRESHOLD = 0; // Size threshold after which files will be written to disk
    
    @Bean
    public MultipartConfigElement multipartConfigElement() {
MultipartConfigElement multipartConfigElement = new MultipartConfigElement( LOCATION, MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD);
return multipartConfigElement;
   
//     final MultipartConfigFactory factory = new MultipartConfigFactory();
    }
    
@Bean
public StandardServletMultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}

톰캣 의 server.xml 에서.

<Context 태그로 시작되는 부분에 allowCasualMultipartParsing = "true"  속성을 추가 한다.

이렇게 해놓고 파일 업로드를 해보면 2097152 파일 사이즈 초과 해서 어쩌고 에러 날때 있다.

그때 프로젝트의 web.xml 에 

<multipart-config>
<!-- 52MB max -->
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>

</multipart-config>     

이거 추가 해준다.

왜 이렇게 복잡하게 설정해야 하는지 모르겟지마는... java 로 설정 바꿀때 web.xml 도 java로 바꿀껄 신경 쓰이는 부분이 많다.

cvc-complex-type.2.4.a: Invalid content was found starting with element 'multipart-config'. One of '{"http://java.sun.com/xml/ns/javaee":init-param, "http://java.sun.com/xml/ns/javaee":load-on-startup, "http://java.sun.com/xml/

 ns/javaee":run-as, "http://java.sun.com/xml/ns/javaee":security-role-ref}' is expected.

web.xml 에 설정 하고 나서 저런 에러 아닌 에러가 발생 하는데 xsd 포멧에 맞지 않아 그렇다고들 한다.

그냥 실행은 잘 된다. 

그러므로 일단 무시하는 걸로. ~!

2017년 1월 11일 수요일

Spring + MySql + JAVA Config Master / Slave 구조

까먹지 말자 블로그(http://kwon37xi.egloos.com/) 에서 찾아 적용 해보았다.

MySql Master / Slave 구조 설정이 생각보다 쉽지 않았다.

열심히 구글링 한 결과 까먹지 말자 블로그(http://kwon37xi.egloos.com/) 도착해 소스를 발견 하여 적용 해봤는데

잘되는듯 하다.

import javax.sql.DataSource;
import net.sf.log4jdbc.Log4jdbcProxyDataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;


/**
 * {@link kr.pe.kwonnam.replicationdatasource.LazyReplicationConnectionDataSourceProxy} 를 통한 리플리케이션 테스트 설정
 * *
 * 동일한 테이블에 동일한 양의 데이터가 들어있지만 쓰기쪽은 write_x 읽기 쪽은 read_x 라는 형태의 name 컬럼 데이터를
 * 가지도록 조작한 두 개의 데이터 소스를 생성한다.
 * <p/>
 * 실전 환경에서는 writeDataSource는 Master DB를, readDataSource는 Slave DB를 바라보는 커넥션 풀이어야 한다.
 */

@Configuration
@ComponentScan
public class ContextDataSource {

@Bean(destroyMethod="close")
public DataSource wirteDataSource(){
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://192.168.0.1/dbName");
basicDataSource.setUsername("daisy");
basicDataSource.setPassword("2016Daisy!");
return basicDataSource;
}

@Bean(destroyMethod="close")
public DataSource readDataSource(){

BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://192.168.0.1/dbName");
basicDataSource.setUsername("daisy");
basicDataSource.setPassword("2016Daisy!");
return basicDataSource;
}
 
    @Autowired
    @Bean
    public DataSource dataSourceSpied(@Qualifier("wirteDataSource") DataSource writeDataSource, @Qualifier("readDataSource") DataSource readDataSource) {
        return new LazyReplicationConnectionDataSourceProxy(writeDataSource, readDataSource);
    }

    @Primary
    @Bean
    public DataSource dataSource(@Qualifier("dataSourceSpied") DataSource  datasource) {
     return new Log4jdbcProxyDataSource(datasource);
    }
}


잘된듯 잘된듯.. 하다. 무엇인가 새로운 벽에 도달 할 것으로 보여진다. 

아.. Query 로그 보기 쉽게 하기 위해 

<dependency>
    <groupId>org.lazyluke</groupId>
    <artifactId>log4jdbc-remix</artifactId>
    <version>0.2.7</version>
</dependency>

DataSource 에 log4jdbc remix 설정

첫 셋팅이다 보니 이상한게 한두개가 아니네. 

갤럭시 기어 S3 프론티어 LTE 번호 변경

기어 S3를 모 나름 한동안 잘 쓰고 있는데 자꾸 이상한 전화가 온다.

문자가 온다.. 머지?? 난 가입도 안했었는데????

어느날 . 송*미 님 기업은행 ~~;;;;

전화 걸어서 아니라고 설명 했는데 승인 문자 외 결제 해야 될 내역 문자는 계속 온다.

광고 전화도 많이 오고..

우와.. 돌아버리겠다. 이 번호 쓰지 말아야 할 번호 인가보다. 줸장..

하여 Tworld 가서 번호 변경 신청을 했다.

원하는 번호를 찾아서 변경 완료~ !

자 이제 기어를 재부팅 하자.

얏호.. 재부팅.. 안되네..

원래 스마트폰도 몇번씩 하니까 한번더. 재부팅.. 아놔.. 왜 안되지...

한 열번은 재부팅 해봐도 안된다. ..

헐....

114 통화 후 알아낸 방법

기어에서 #758353266#646# 번호를 누르면 유심 다운로드가 시작된다.

한참이 걸려서 번호 변경 완료..

자 그럼 잘되나 확인 해볼까? TShare 를 실행~

올~ 역시 안된다.. 안내 문구가 나온다. 스맛폰에 TShare 깔으라고.

깔려 있고 셋팅 끝났는데 안될 경우 지웠다 다시 깔으라고...

번호 한번 잘 못 받았다가 엄청 불편 하다.

광고 문자나 광고 전화가 유난히 많이 올 경우.. 번호를 바꾸시길 강력히 권장한다. !!