반응형

스프링에 오라클과 마이바티스 연동을 하다가 Test클래스에서 아래와 같은 에러가 발생하였습니다.

 

Resource specification not allowed here for source level below 1.7

 

저는 1.8 버전을 사용중인데 pom.xml에 1.6으로 되어 있더군요

1.8로 바꿔주시면 위와 같은 에러는 사라지게 됩니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,

ConnectionPool이란?

2020/IT Q_A 2020. 5. 20. 11:01
반응형

  온라인 쇼핑몰의 경우 동시에 수십 명, 많게는 수백 명까지 접속해서 상품 조회, 주문하기 등의 기능을 사용하는데 앞의 방법처럼 데이터베이스와 연동해 작업해야 한다면 너무 비효율적입니다. 이 문제를 해결하기 위해 현재는 웹어플리케이션이 실행됨과 동시에 연동할 데이터베이스와의 ㅇ녀결을 미리 설정해 둡니다. 그리고 필요할 때마다 미리 연결해 놓은 상태를 이용해 빠르게 데이터베이스와 연동하여 작업을 합니다. 이렇게 미리 데이터베이스와 연결시킨 상태를 유지하는 기술을 커넥션 풀(ConnectionPool)이라고 부릅니다.

 

기존 데이터베이스 연동 방법의 문제점

  • 애플리케이션에서 데이터베이스에 연결하는 과정에서 시간이 많이 걸립니다.

ConnectionPool

  • 애플리케이션 실행 시 미리 ConnectionPool 객체를 생성한 후 데이터베이스와 연결을 맺습니다.
  • 애플리케이션은 데이터베이스 연동 작업 발생 시 이 ConnectionPool 객체를 이용해서 작업합니다.

 

커넥션 풀 동작 과정

  • 톰캣 컨테이너를 실행한 후 응용 프로그램을 실행합니다.
  • 톰캣 컨테이너 실행 시 ConnectionPool 객체를 생성합니다.
  • 생성된 커넥션 객체는 DBMS와 연결합니다.
  • 데이터베이스와의 연동 작업이 필요할 경우 응용 프로그램은 ConnectionPool에서 제공하는 메서드를 호출하여 연동합니다.

  톰캣 컨테이너는 자체적으로 ConnectionPool 기능을 제공합니다. 톰캣 실행 시 톰캣은 설정파일에 설정된 데이터베이스 정보를 이용해 미리 데이터베이스와 연결하여 ConnectionPool 객체를 생성한 후 애플리케이션이 데이터베이스와 연동할 일이 생기면 ConnectionPool 객체의 메서드를 호출해 빠르게 연동하여 작업합니다.

 

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형
Stacktrace:]을(를) 발생시켰습니다.
com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '���ѹα� ǥ�ؽ�' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
	at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
	at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2120)
	at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2143)
	at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1310)
	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:967)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)
	at org.apache.tomcat.dbcp.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:55)
	at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:355)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:115)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:665)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:544)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:753)
	at org.apache.jsp.connection_jsp._jspService(connection_jsp.java:137)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

 

MySQL 5.1.23 이상의 버전을 사용하면 MySQL 타임존의 시곤표현 포맷이 달라져서 Connector에서 인식을 하지 못합니다.

해결법은 MySQL 버전을 5.1.23으로 낮추거나 URL주소에 serverTimezone을 추가해 주어야 합니다.

 

<!-- path는 우리 프로젝트의 이름 / docbase는 www를 넣어 줌으로써 WebContent라는걸 알림 -->
<Context path="/UserChat" docBase="www">
<Resource
	name="jdbc/UserChat"
	auth="Container"
	type="javax.sql.DataSource"
	driverClassName="com.mysql.jdbc.Driver"
	loginTimeout="10"
	validationQuery="SELECT 1 FROM DUAL"
	maxWait="5000"
	username="id"
	password="pasword"
	testOnBorrow="true"
	url="jdbc:mysql://localhost:3308/UserChat" />
<ResourceLink type="javax.sql.data.DataSource"
	name="jdbc/UserChat"
	global="jdbc/UserChat" />
</Context>
<!-- path는 우리 프로젝트의 이름 / docbase는 www를 넣어 줌으로써 WebContent라는걸 알림 -->
<Context path="/UserChat" docBase="www">
<Resource
	name="jdbc/UserChat"
	auth="Container"
	type="javax.sql.DataSource"
	driverClassName="com.mysql.jdbc.Driver"
	loginTimeout="10"
	validationQuery="SELECT 1 FROM DUAL"
	maxWait="5000"
	username="root"
	password="111111"
	testOnBorrow="true"
	url="jdbc:mysql://localhost:3308/UserChat?serverTimezone=UTC" />
<ResourceLink type="javax.sql.data.DataSource"
	name="jdbc/UserChat"
	global="jdbc/UserChat" />
</Context>

url="jdbc:mysql://localhost:3308/UserChat?serverTimezone=UTC" 이 부분을 수정해주니 잘 작동이 되었습니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

C:\Windows\System32\drivers\etc에 있는 hosts파일에 저장되어 있는 local ip와 현재 ip가 달라서 발생하는 오류입니다.
저같은 경우는 hosts를 visual code로 열어서

ip주소를 맞춰주었더니 해결이 되었습니다.

(기존 ip 주소는 127.0.0.0으로 되어 있었음.. 127.0.0.1로 바꾸니 해결됬어요)

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

윈도우 10에서 다운로드 > 설치 후 mongod가 실행되지 않는다면 다음을 따라서 환경변수 추가를 해보세요. 1. [내컴퓨터] 우클릭 > [고급시스템설정] > [환경변수(N)] 2. 시스템변수 리스트 중 'Path'를 선택하고 편집을 선택한 후 'Mongodb의 설치경로₩bin'을 추가 3. vscode 재실행 후 터미널에 'mongod'입력 mongo를 쳤을때 내용이 나오면 ㅇㅋ

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

Edit in settings.json 찾으시는데 어려움을 가지고 계신 분들께... 1. 영상에 보면 prettier 입력할 때 위치한 검색칸에 editor format on save 입력하고 엔터누르세요. 2. 'editor: format on save 보이실 겁니다. 체크박스에 체크하세요. 3. 검색칸에 다시 json 검색하시면 Launch 항목에서 'edit in settings.json' 보이실겁니다. 클릭하세요.

반응형

'2020 > IT Q_A' 카테고리의 다른 글

java.net.BindException: Cannot assign requested address: JVM_Bind  (0) 2020.03.15
MONgo db 환경변수 설정  (0) 2020.02.21
java script(const, let)  (0) 2020.02.14
증감연산자 x++, ++x  (0) 2020.02.13
Ajax란?  (0) 2020.02.13
블로그 이미지

꽃꽂이하는개발자

,
반응형

초기화와 생성을 해주는 것입니다.

const(constant)는 상수

let은 변수 입니다.

아래처럼 let으로 사용하게 되면

 

let a = 100;

let b = a - 5;

a = 10;

console.log(b);

 

console에는  95가 출력됩니다.

하지만 

 

const a = 100;

const b = a - 5;

a = 10;

console.log(b);

입력하게 되면

index.js:3 Uncaught TypeError: Assignment to constant variable. 에러가 뜨게 됩니다.

이 말은 const 타입으로 a를 100으로 정의를 했는데 상수이기 때문에 a에 10을 대입하지 못하기 때문입니다.

 

const는 변경할 수 없는 상수

let은 변수!

 

위를 예로 입력한 수를 변경하면 안되는 경우는 const를 사용하고

변경해도 상관 없는 경우는 let을 사용하면 됩니다.

 

 

 

반응형

'2020 > IT Q_A' 카테고리의 다른 글

MONgo db 환경변수 설정  (0) 2020.02.21
Visual Studio Edit in settings.json  (0) 2020.02.17
증감연산자 x++, ++x  (0) 2020.02.13
Ajax란?  (0) 2020.02.13
xml에서 주석처리 단축키  (0) 2020.01.30
블로그 이미지

꽃꽂이하는개발자

,
반응형

 

var a = 100;
var x = 1;
var y = a + x++;

y의 값은 무엇일까요?

x++는 현재 수식에 x의 값을 먼저 대입한 후에, 자신을 1증가시키기 때문에 y=100+1이 먼저 계산되고 그런 후에 x++이 되므로 최종적으로 y의 값은 101, 값은 2가 됩니다.

 

반대로 ++x를 한다면?

x가 먼저 2가 되고 a와 합쳐지고 y에 대입되게 됩니다.

 

반응형

'2020 > IT Q_A' 카테고리의 다른 글

Visual Studio Edit in settings.json  (0) 2020.02.17
java script(const, let)  (0) 2020.02.14
Ajax란?  (0) 2020.02.13
xml에서 주석처리 단축키  (0) 2020.01.30
model1, model2, mvc 패턴  (0) 2020.01.29
블로그 이미지

꽃꽂이하는개발자

,