복붙노트

[SPRING] Spring, DBCP 및 MySQL을 사용하여 연결 시간대 설정

SPRING

Spring, DBCP 및 MySQL을 사용하여 연결 시간대 설정

내 환경

비슷한 게시물

모래밭

내 문제

내 아이디어 / 연구

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="URL" value="${database.url}" /> 
    <property name="user" value="${database.username}" /> 
    <property name="password" value="${database.passwd}" /> 
    <property name="connectionCachingEnabled" value="true"/>
    <property name="sessionTimeZone" value="GMT-3"/>
</bean>

도움을 요청하는 영역 :)

도움 / 팁 / 조언 / 지식 공유에 미리 감사드립니다.

해결책:

내 솔루션은이 게시물에 수집 된 팁을 기반으로했습니다! 모두에게 감사드립니다!

(...)
@Override
public Connection getConnection() {
    Connection conn = null;
    Statement statement = null;
    try {
        conn = super.getConnection();
        statement = conn.createStatement();
        statement.execute("SET time_zone = \'" + timezone+"\'");
    } catch (SQLException e) {
        LOG.fatal("Error while SET time_zone", e);
    } finally {
        try {
            statement.close();
        } catch (SQLException e) {
            LOG.warn("Error while closing statement", e);
        }
    }
    if(LOG.isDebugEnabled())
        LOG.debug("SET time_zone("+timezone+") for connection, succeed!");
    return conn;
}
(...)

내 Spring 설정 파일 :

<bean id="dataSource" class="com.my.package.dbcp.TimezoneEnabledDataSource" destroy-method="close">
    (...)
    <property name="timezone" value="${database.timezone}" />
    (...)
</bean>

이 게시물이 앞으로 누군가를 도울 수 있기를 바랍니다. 어떤 질문이라도 ping!

해결법

  1. ==============================

    1.데이터 소스에 이러한 속성이 없으면 속성을 확장하고 추가 할 수 있습니다.

    데이터 소스에 이러한 속성이 없으면 속성을 확장하고 추가 할 수 있습니다.

    public TimezoneEnabledDataSource extends BasicDataSource {
        private String timezone;
        //getter and setter for it
    
        @Override    
        public Connection getConnection() {
            Connection c = super.getConnection();
            // execute a query: SET time_zone = '-8:00'
            return c;
        }
    }
    

    자세한 내용은 http://www.electrictoolbox.com/mysql-set-timezone-per-connection/을 참조하십시오.

    MySQL 문서는 다음과 같이 썼다.

    c3p0에 내장 된 것이 없는지 확인할 수도 있습니다.

  2. ==============================

    2.DBCP 구성 요소의 initConnectionSqls 등록 정보에 동일한 SQL 문을 넣을 수 있어야합니다. 이것을 DBCP 구성 요소에 추가하기 만하면됩니다.

    DBCP 구성 요소의 initConnectionSqls 등록 정보에 동일한 SQL 문을 넣을 수 있어야합니다. 이것을 DBCP 구성 요소에 추가하기 만하면됩니다.

    <property name="initConnectionSqls" value="SET time_zone = '${database.timezone}'"/>
    

    DBCP 버전에 따라 connectionInitSqls를 속성 이름으로 사용해야 할 수도 있습니다. 이 정보는 DBCP 구성. 서의 내용입니다.

  3. ==============================

    3.가능한 해결책 중 하나 :

    가능한 해결책 중 하나 :

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="URL" value="${database.url}?serverTimezone=America/Los_Angeles" /> 
        <property name="user" value="${database.username}" /> 
        <property name="password" value="${database.passwd}" /> 
        <property name="connectionCachingEnabled" value="true"/>
        <property name="sessionTimeZone" value="GMT-3"/>
    </bean>
    
  4. ==============================

    4.BasicDataSource에는 "sessionTimeZone"멤버가 없습니다. DBCP보다 "더 나은"연결 풀인 C3P0을 사용하거나 Java EE 웹 서버에있는 경우이를 사용하여 JNDI 데이터 소스를 초기화하십시오.

    BasicDataSource에는 "sessionTimeZone"멤버가 없습니다. DBCP보다 "더 나은"연결 풀인 C3P0을 사용하거나 Java EE 웹 서버에있는 경우이를 사용하여 JNDI 데이터 소스를 초기화하십시오.

  5. from https://stackoverflow.com/questions/5970835/setting-connection-timezone-with-spring-and-dbcp-and-mysql by cc-by-sa and MIT license