2015-01-19 3 views
2

Grails를 사용하여 MySQL 연결을 관리 할 때 DataSource에서이 행을 따라 속성 섹션이 필요합니다 (재 연결을 처리하기 위해). 그루비 : 톰캣의 연결 풀을 사용하도록 전환하는 경우JNDI를 통해 tomcat 데이터베이스 리소스를 사용하는 Grails에 대해 pooled = true 또는 pooled = false가되어야합니다.

dataSource { 
    pooled = true 
    driverClassName = "com.mysql.jdbc.Driver" 
    dialect = "org.hibernate.dialect.MySQL5InnoDBDialect" 
    properties { 
     maxActive = -1 
     minEvictableIdleTimeMillis=1800000 
     timeBetweenEvictionRunsMillis=1800000 
     numTestsPerEvictionRun=3 
     testOnBorrow=true 
     testWhileIdle=true 
     testOnReturn=true 
     validationQuery="SELECT 1" 
    } 

environments { 
    production{ 
     dataSource { 
      dbCreate = "upate" 
      url = "jdbc:mysql://127.0.0.1:3306/mydb" 
      username = "myuser" 
      password = "mypass" 
     } 

    } 

, 대부분의 예는이 제공 :

production { 
    dataSource { 
     dbCreate = "update" 
     jndiName = "java:comp/env/revolve" 
    } 

질문 1

DataSource.grovvy에서 pooled = true 또는 false로 설정하면이 연결 유형 (예 : 바람둥이 사용), 또는 중요합니까? 그것이 틀림 없다고 말하는 글이 있으며, 틀림 없다고 말하는 글과 그렇지 않은 글이 있습니다. True로 설정하면 이는 풀 풀이 있음을 의미하지만 대부분의 예제가 권장하는 것입니다.

질문 2

은 속성 섹션은 무시되어 있습니까? 그렇지 않은 경우 설정할 권장 필드는 무엇입니까? 내 시행 착오에서 속성은 무시되고있는 것 같고, this one과 같은 게시물과는 반대입니다.

예. JNDI를 사용할 때 DataSource.java 속성의 validationQuery = "SELECT 1"이 무시되는 것 같습니다. 나는. DB를 다시 시작하면 Tomcat의 응용 프로그램이 영구적으로 DB에 연결이 끊어졌습니다. 내가 context.xml에 thusly 히 톰캣이 같은 라인을 추가하는 경우 :

<Resource name="revolve" auth="Container" type="javax.sql.DataSource" 
    maxActive="50" maxIdle="5" maxWait="10000" 
    username="myuser" password="mypass" driverClassName="com.mysql.jdbc.Driver" 
    validationquery="SELECT 1;" 
    url="jdbc:mysql://127.0.0.1:3306/mydb"/> 

을하고 난 DB를 지금 다시 시작하는 경우, Tomcat을 다시 시작 톰캣의 응용 프로그램은 계속 실행됩니다.

이것은 Tomcat의 연결 풀을 사용할 때 DataSource.groovy의 dataSource 속성 섹션이 무시된다는 것을 의미합니다.

답변

5

JNDI 데이터 소스는 서버의 연결 풀이므로 풀링하지 않으므로 풀링 된 연결을 풀링합니다. 큰 문제는 아니지만, 로컬 DataSource는 웹 서버의 풀에서 몇 개의 연결을 가져 와서 앱에 대해 "다시 풀"하지만, 풀링의 주된 이유는 데이터를 가져 오는 데 걸리는 시간을 피하기위한 것이기 때문에 불필요합니다. 진짜 연결. 이 작업은 약 1 초 정도 걸릴 수 있지만 오랜 시간이 아니지만 성능에는 영향을 미칩니다. 그러나 JNDI 풀에는 이미 지연이 발생 했으므로 다시 풀링 할 때 이점이 없습니다.

또한 이러한 설정은 로컬 연결 풀의 작동 방식과 관련이 있으므로 속성 블록을 생략해야하지만 이미 풀링 된 연결을 검색하는 경우 초기 크기, 최대 크기, 구성 할 필요가 없는지 여부 borrow/return/etc., 유효성 검사 쿼리 등을 테스트 할 수 있습니다. 이러한 설정은 JNDI를 통해 사용할 수있는 풀의 구성에서 이루어져야하며 웹 서버에서 수행되어야합니다.

+1

이 답변에 따르면 weblogic-server에 구성된 jndi 데이터 소스를 사용하는 응용 프로그램에서는 예외가 발생하지 않아야합니다 ( weblogic.jdbc.extensions.PoolLimitSQLException). 그것이 발생하는 것에 관해서는,이 점에 대해 도움을 요청 하시겠습니까? –