JNDI,mysql 5.6和tomcat 7的大多数示例都在DataSource.groovy中进行了定义:
dataSource { pooled = true driverClassName = "com.mysql.jdbc.Driver" dialect = 'org.hibernate.dialect.MySQL5InnoDBDialect' } environments: production { dataSource { dbCreate = "update" jndiName = "java:comp/env/myDatasourceName } }
并在Tomcat中的conf / context.xml中:
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="myDatasourceName" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="password" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/my_db_name"/> </Context>
问题是,这是基本的小批量生产系统的正确设置吗?如果数据库先降后升,则应重新连接?
在DataSource.xml中是一个非常复杂的示例:
dataSource { dbCreate = "update" //url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10099;DB_CLOSE_ON_EXIT=FALSE" properties { // Documentation for Tomcat JDBC Pool // http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Common_Attributes // https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/PoolConfiguration.html jmxEnabled = true initialSize = 5 maxActive = 50 minIdle = 5 maxIdle = 25 maxWait = 10000 maxAge = 10 * 60000 timeBetweenEvictionRunsMillis = 5000 minEvictableIdleTimeMillis = 60000 validationQuery = "SELECT 1" validationQueryTimeout = 3 validationInterval = 15000 testOnBorrow = true testWhileIdle = true testOnReturn = false ignoreExceptionOnPreLoad = true // http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#JDBC_interceptors jdbcInterceptors = "ConnectionState;StatementCache(max=200)" defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED // safe default // controls for leaked connections abandonWhenPercentageFull = 100 // settings are active only when pool is full removeAbandonedTimeout = 120000 removeAbandoned = true // use JMX console to change this setting at runtime logAbandoned = false // causes stacktrace recording overhead, use only for debugging /* // JDBC driver properties // Mysql as example dbProperties { // Mysql specific driver properties // http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html // let Tomcat JDBC Pool handle reconnecting autoReconnect=false // truncation behaviour jdbcCompliantTruncation=false // mysql 0-date conversion zeroDateTimeBehavior='convertToNull' // Tomcat JDBC Pool's StatementCache is used instead, so disable mysql driver's cache cachePrepStmts=false cacheCallableStmts=false // Tomcat JDBC Pool's StatementFinalizer keeps track dontTrackOpenResources=true // performance optimization: reduce number of SQLExceptions thrown in mysql driver code holdResultsOpenOverStatementClose=true // enable MySQL query cache - using server prep stmts will disable query caching useServerPrepStmts=false // metadata caching cacheServerConfiguration=true cacheResultSetMetadata=true metadataCacheSize=100 // timeouts for TCP/IP connectTimeout=15000 socketTimeout=120000 // timer tuning (disable) maintainTimeStats=false enableQueryTimeouts=false // misc tuning noDatetimeStringSync=true } */ } }
现在我不知道这些参数的95%是做什么的,但是我想我都需要它们吗?
我不明白的是
谢谢!
AFAIK,Tomcat与管理数据库连接无关。从Grails 2.3.6开始,以下是推荐的默认数据源属性:
properties { //see http://grails.org/doc/latest/guide/conf.html#dataSource for documentation jmxEnabled = true initialSize = 5 maxActive = 50 minIdle = 5 maxIdle = 25 maxWait = 10000 maxAge = 10 * 60000 timeBetweenEvictionRunsMillis = 5000 minEvictableIdleTimeMillis = 60000 validationQuery = "SELECT 1" validationQueryTimeout = 3 validationInterval = 15000 testOnBorrow = true testWhileIdle = true testOnReturn = false jdbcInterceptors = "ConnectionState;StatementCache(max=200)" defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED }