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 상태에서 스크립트를 실행 해야 할때.
// 여기에 작성 하면 잘 돌아 간다.
});
라벨:
javascript,
jquery,
library,
onLoad,
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);
}
}
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 설정
첫 셋팅이다 보니 이상한게 한두개가 아니네.
라벨:
Config,
java,
java config,
Master,
Master/Slave,
MySql,
Slave,
Spring
갤럭시 기어 S3 프론티어 LTE 번호 변경
기어 S3를 모 나름 한동안 잘 쓰고 있는데 자꾸 이상한 전화가 온다.
문자가 온다.. 머지?? 난 가입도 안했었는데????
어느날 . 송*미 님 기업은행 ~~;;;;
전화 걸어서 아니라고 설명 했는데 승인 문자 외 결제 해야 될 내역 문자는 계속 온다.
광고 전화도 많이 오고..
우와.. 돌아버리겠다. 이 번호 쓰지 말아야 할 번호 인가보다. 줸장..
하여 Tworld 가서 번호 변경 신청을 했다.
원하는 번호를 찾아서 변경 완료~ !
자 이제 기어를 재부팅 하자.
얏호.. 재부팅.. 안되네..
원래 스마트폰도 몇번씩 하니까 한번더. 재부팅.. 아놔.. 왜 안되지...
한 열번은 재부팅 해봐도 안된다. ..
헐....
114 통화 후 알아낸 방법
기어에서 #758353266#646# 번호를 누르면 유심 다운로드가 시작된다.
한참이 걸려서 번호 변경 완료..
자 그럼 잘되나 확인 해볼까? TShare 를 실행~
올~ 역시 안된다.. 안내 문구가 나온다. 스맛폰에 TShare 깔으라고.
깔려 있고 셋팅 끝났는데 안될 경우 지웠다 다시 깔으라고...
번호 한번 잘 못 받았다가 엄청 불편 하다.
광고 문자나 광고 전화가 유난히 많이 올 경우.. 번호를 바꾸시길 강력히 권장한다. !!
문자가 온다.. 머지?? 난 가입도 안했었는데????
어느날 . 송*미 님 기업은행 ~~;;;;
전화 걸어서 아니라고 설명 했는데 승인 문자 외 결제 해야 될 내역 문자는 계속 온다.
광고 전화도 많이 오고..
우와.. 돌아버리겠다. 이 번호 쓰지 말아야 할 번호 인가보다. 줸장..
하여 Tworld 가서 번호 변경 신청을 했다.
원하는 번호를 찾아서 변경 완료~ !
자 이제 기어를 재부팅 하자.
얏호.. 재부팅.. 안되네..
원래 스마트폰도 몇번씩 하니까 한번더. 재부팅.. 아놔.. 왜 안되지...
한 열번은 재부팅 해봐도 안된다. ..
헐....
114 통화 후 알아낸 방법
기어에서 #758353266#646# 번호를 누르면 유심 다운로드가 시작된다.
한참이 걸려서 번호 변경 완료..
자 그럼 잘되나 확인 해볼까? TShare 를 실행~
올~ 역시 안된다.. 안내 문구가 나온다. 스맛폰에 TShare 깔으라고.
깔려 있고 셋팅 끝났는데 안될 경우 지웠다 다시 깔으라고...
번호 한번 잘 못 받았다가 엄청 불편 하다.
광고 문자나 광고 전화가 유난히 많이 올 경우.. 번호를 바꾸시길 강력히 권장한다. !!
피드 구독하기:
글 (Atom)