Mysql JDBC Driver参数配置

出处(他也是转载,原始出处未知。。):https://blog.csdn.net/w345731923/article/details/100543454

目录

 

1.建立连接配置

2.考虑到高可用的问题涉及到的参数配置

3.保证访问过程安全性涉及到的参数

4.访问性能拓展*

5.后续便于调试配置相关参数

6.其他


1.建立连接配置

(1)user:连接的用户  默认值:无
(2)Password:连接时使用的密码。默认值:无
(3)socketFactory:驱动程序用于创建与服务器套接字连接的类的名称。该类必须实现了接口“com.mysql.jdbc.SocketFactory”,并有公共无参量构造函数。 默认值:com.mysql.jdbc.StandardSocketFactory
(4)connectTimeout:连接的超时时间设置(单位为毫秒时间),0表示不超时。仅对JDK-1.4或更新版本有效。默认值:0(建立连接的时间)
(5)socketTimeout:连接传递数据时的超时时间设置(默认值0表示不超时)。默认值:0(超时会抛出无响应异常)(等待数据的时间)    
(6)useConfigs:在解析URL属性或应用用户指定的属性之前,加载由逗号“,”分隔的配置属性列表,默认值:无
(7)interactiveClient:设置CLIENT_INTERACTIVE标志(客户端式交互),是根据INTERACTIVE_TIMEOUT(交互到时)而不是WAIT_TIMEOUT(非交互到时)向MySQL通报超时连接。默认值:false
(8)propertiesTransform:com.mysql.cj.conf.ConnectionPropertiesTransform的一个实现,在尝试连接之前,驱动程序将使用它来修改传递给驱动程序的URL属性, 默认值:无
(9)useCompression:与服务器进行通信时是否采用zlib压缩(占用空间小)。默认值:false

2.考虑到高可用的问题涉及到的参数配置

(10)autoReconnect:当数据库连接异常中断时,是否自动重新连接?不推荐使用该特 性,这是因为,当应用程序不能恰当处理SQLExceptions时,它会造成与会话状态和数据一致性有关的副作用默认值:false(官方不建议开启该属性)
(11)autoReconnectForPools:将在每次执行SQL之前尝试ping服务器(保证连接的正确性),使用适合于连接池的再连接策略(默认值为“假”)。默认值:false
(12)failOverReadOnly:在autoReconnect模式下出现故障切换时,是否应将连接设置为“只读”。 默认值:true
(13)reconnectAtTxEnd:如果将autoReconnect设置为“真”,在每次事务结束后驱动程序是否应尝试再连接?默认值:false
(14)roundRobinLoadBalance:启用了autoReconnect而且failoverReadonly为“假”时,是否应按照循环方式挑选要连接的主机?默认值:false(一种连接数据库负载均衡的策略)
(15)queriesBeforeRetryMaster:多少次请求后重新尝试连接Master(涉及到主从架构时考虑这个属性),出现故障切换(使用多主机故障切换)并返回主机之前发出的查询数。无论首先满足了哪个条件,“queriesBeforeRetryMaster”或“secondsBeforeRetryMaster”,均会再次与主机进行连接。默认值为“50”。默认值:50(次数上设置)
(16)secondsBeforeRetryMaster:出现故障切换后,在尝试再次连接到主服务器之前,驱动程序应等待的时间? 无论首先满足了哪个条件,“queriesBeforeRetryMaster”或“secondsBeforeRetryMaster”,均会再次与主 机进行连接。单位为秒,默认值为30。默认值:30(时间上的设置)
(17)enableDeprecatedAutoreconnect:将该属性设置为“真”可禁止检查配置的特性。默认值:false

3.保证访问过程安全性涉及到的参数

(18)allowMultiQueries:允许使用';'分割查询语句,一次执行多个查询,例如“ select * from tb_vehicle;select *  from tb_user;”默认值:false
(19)useSSL:与服务器进行通信时是否使用SSL(Secure Sockets Laye是为网络通信提供安全及数据完整性的一种安全协议,LS与SSL在传输层对网络连接进行加密),默认值:false  (使用场景JDBC版本与MySQL版本不兼容,MySQL的版本更高一些)
(20)requireSSL:如果useSSL设置为true是否使用SSL连接。 默认值:false(这个属性开启QPS会降低,对整体性能会有影响选择开启)
(21)allowUrlInLocalInfile:驱动程序是否应允许“LOAD DATA LOCAL INFILE”语句中的URL? 默认值:false(导入大批量数据的时候可以考虑使用MySql Load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间。这个属性就是涉及这方面的问题)
(22)Paranoid:采取措施,防止在错误信息中泄漏敏感信息,并在可能时清除保存敏感数据的数据结构? 默认值:false(连接出现问题,那么涉及到的敏感信息不能被泄露或清除敏感信息)

4.访问性能拓展*

(23)cacheResultSetMetadata:驱动程序是否应对用于Statements和PreparedStatements的ResultSetMetaData执行缓冲处理? 默认值:false(就是对查询结果结果进行缓存,这样能大大提高查询的效率)
(24)prepStmtCacheSize:如果允许预处理语句缓冲功能,应缓冲处理多少条预处理语句?(编译之后的)默认值:25 咱们配置的是250(并不是越大越好,建议缓存一些使用频率偏高的)
(25)prepStmtCacheSqlLimit:如果允许预处理语句缓冲功能,驱动程序将执行解析缓冲处理的最大SQL是什么? 默认值:256  咱们配置的是2048
useServerPrepStmts:如果服务器支持,是否使用服务器端预处理语句? 默认值为“真”。默认值:true(开启后处理sql的的能力得到提升)
rewriteBatchedStatements:MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。只有把rewriteBatchedStatements参数置为true,驱动才会帮你批量执行SQL ,效率自然获得提升 咱们项目设置的为true
(26)maintainTimeStats:驱动程序是否应维持各种内部定时器,以允许空闲时间计算,以及与服务器的连接失败时允许提供更详细的错误消息? 将该属性设置为“假”,对于每次查询,至少能减少两次对System.getCurrentTimeMillis()的调用(在一定程度上提高系统反应速度)。默认值:true
(27)blobSendChunkSize:组块,当通过ServerPreparedStatements发送BLOB/CLOB(较大的文本信息)时使用。默认值:1048576
(28)cacheCallableStmts:驱动程序是否应对CallableStatements(继承自PreparedStatements)的解析过程执行缓冲处理。 默认值:false
(29)cachePrepStmts:驱动程序是否应对客户端预处理语句的PreparedStatements的解析过程(预编译后的sql)执行缓冲处理,是否应检查服务器端预处理语句的适用性以及服务器端预处理语句本身?默认值:false(就是说如果驱动程序对PreparedStatements解析过程执行缓存以及是否对其缓存语句适用性以及语句本身进行检测,开启这个功能对性能会有约20%的提升咱们的项目设置为true,注意使用这个属性的前提是开启useServerPrepStmts=true不然达不到缓存的效果sql语句也不能做改动)
(30)metadataCacheSize:如果将cacheResultSetMetaData设置为“真”,对cacheResultSetMetadata的查询次数,默认值:50。
(31)cacheServerConfiguration:驱动程序是否应根据每条URL对“HOW VARIABLES”和“SHOW COLLATION”(校对集)的结果执行缓冲处理?默认值:false(我理解的意思是对筛选过后的数据进行缓存) 咱们项目设置的是true
(32)dontTrackOpenResources:JDBC规范要求驱动程序自动跟踪和关闭资源。但是,如果你的应用程序不能明确调用作用在语句或结果集上的close(),可能会导致内存泄漏。将该属性设置为“真”,可放宽该限制,对于某些应用程序,会提供更高的内存效率。默认值:false
(33)dynamicCalendars:需要时,驱动程序是否应检索默认日历,或根据连接/会话对其进行缓冲处理?默认值:false(缓冲日历信息设置为true会占用一些内存如果没有特殊要求取默认值)
(34)elideSetAutoCommits:当服务器的状态与Connection.setAutoCommit(boolean)请求的状态不匹配时,驱动程序是否仅应发出“set autocommit=n”(当n=1时会隐性提交前面的事务,n=0时不会提交前面的事务,所以说这个属性可能在特定场合才考虑使用)查询?默认值:false  咱们项目为开启的,一旦认定不匹配时就提交上次操作的事务保证数据安全
(35)holdResultsOpenOverStatementClose:驱动程序是否应按照JDBC规范的要求关闭Statement.close()上的结果集?默认值:false(当我们不一次性获取结果集(循环获取)信息时若关闭结果集信息很可能不全)
emulateLocators:驱动程序应该使用定位器模拟java.sql.Blobs吗?启用此功能后,驱动程序将延迟加载实际的Blob数据,直到访问了blob数据流上的检索方法之一(getInputStream(),getBytes()等)。默认值:false
(36)locatorFetchBufferSize:如果'emulateLocators'配置为'true',那么在为getBinaryInputStream(获取二进制数据)获取BLOB数据时应该使用什么大小的缓冲区(定义缓冲区的大小)?默认值:1048576
(37)useFastIntParsing:是否使用内部“String->Integer”转换子程序来避免创建过多对象?默认值:true(提高效率)
(38)useLocalSessionState:驱动程序是否应该引用由协议维护的Connection.setAutoCommit()和Connection.setTransactionIsolation()以及事务状态设置的自动提交和事务隔离的内部值(设置过后的值),而不是查询数据库或盲目地向数据库发送命令commit()或rollback()方法调用?默认值:false(一般情况下,驱动可以保证本地值与远程服务器值保持一致。当应用调用setAutoCommit, setTransactionIsolation 和 setReadOnly这三个接口设置参数值时,会与远程服务器同步。具体而言,当useLocalSessionState为true时,若值与本地值不一致,则发往远程更新。当useLocalSessionState为false时,无论设置值与本地值是否一致,每次都发往远程更,所以设置为true就能在一定程度上优化整体性能)咱们项目设置为true
(39)useNewIO:驱动程序是否应将java.nio.* interfaces用于网络通信 默认值:false(标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。传统的 IO 流都是阻塞式的。也就是说,当一个线程调用 read() 或 write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行 IO 操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。Java NIO 是非阻塞模式的。当线程从某通道进行读写数据时,若没有数据可用时,该线程可以进行其他任务。线程通常将非阻塞 IO 的空闲时间用于在其他通道上执行 IO 操作,所以单独的线程可以管理多个输入和输出通道。因此, NIO 可以让服务器端使用一个或有限几个线程来同时处理连接到服务器端的所有客户端。当然会有缺点,newio与传统io不同他会把一部分数据直接从管道“搬到”缓存区,当你要获得一条数据时比如username:wph,password:123456时缓存区只有username:wph,导致数据不全,数据不能返回,进而会反复操作这个步骤直到信息完整,这样一来就会造成效率的降低,所以它尽管有优势但在没有大量测试的情况下建议不要开启)
(40)useReadAheadInput:从服务器读取数据时,是否使用较新的、优化的非阻塞缓冲输入流?默认值:true(官方默认开启)

5.后续便于调试配置相关参数

(日志、记录数据相关,进行选择设置,项目一起来日志信息过多,反而不利于调试)
(41)logger:实现了com.mysql.jdbc.log.Log的类的名称,com.mysql.jdbc.log.Log用于记录消息(默认为“com.mysql.jdbc.log.StandardLogger”,它会将日志记录到STDERR)。默认值:com.mysql.jdbc.logger
(42)profileSQL:跟踪查询以及它们对已配制记录器的执行/获取次数(真/假),比如当我们要对某一条sql的性能进行分析时,可以使用它。在mysql5.7之后,profile信息将逐渐被废弃,mysql推荐使用performance schema,默认为“假”。默认值:false
(43)reportMetricsIntervalMillis:如果允许“gatherPerfMetrics(驱动程序是否应收集性能指标,并通过配置的记录器每隔“reportMetricsIntervalMillis”毫秒报告它们?此默认值:false)”,记录它们的频率是多少(单位毫秒)? 默认值:30000
(44)enablePacketDebug:允许时,将保留“packetDebugBufferSize”信息包的环形缓冲区,并当在驱动程序代码的关键区域抛出异常时进行转储。默认值:false
(45)packetDebugBufferSize:当“enablePacketDebug”为“真”时,需要保留的最大信息包数目。默认值:20
(46)slowQueryThresholdMillis:如果启用了'logSlowQueries',那么在它之前的查询(以ms为单位)记录为'slow'需要多长时间? 默认值:2000
(47))logSlowQueries:是否要记录时间长于“slowQueryThresholdMillis”的查询?默认值:false
(48)autoGenerateTestcaseScript:驱动程序是否应将正在执行的SQL(包括服务器端预处理语句)转储到STDERR?默认值:false
(49)dumpQueriesOnException:驱动程序是否应将发送至服务器的查询内容转储到SQLExceptions中?默认值:false
(50)maxQuerySizeToLog:控制分析或跟踪时将记录的查询的最大长度/大小。 默认值:2048
(51)explainSlowQueries:如果启用了“logSlowQueries”,驱动程序是否应自动在服务器上发出“EXPLAIN”并将结果发送到处于WARN级别的已配置日志?默认值false
(52)useUsageAdvisor:驱动程序是否应该发出“使用”警告,建议正确有效地使用JDBC和MySQL Connector / J到日志(true / false,默认为'false')?默认值:false
(53)traceProtocol:是否应记录跟踪级网络协议?默认值:false

6.其他

(54)useUnicode:处理字符串时,驱动程序是否应使用Unicode字符编码?默认值:false
(55)characterEncoding:如果“useUnicode”被设置为“真”,处理字符串时,驱动程序应使用什么字符编码? 默认为“autodetect”。默认值:无
(56)characterSetResults:字符集,用于通知服务器以何种字符集返回结果。默认值:无
(57)connectionCollation:如果设置了它,将通知服务器通过“set collation_connection”使用该校对规则。默认值:无
(58)sessionVariables:以逗号隔开的“名称/值”对列表,当驱动程序建立了连接后,以“SET SESSION …”的方式将其发送给服务器。默认值:无
(59)allowNanAndInf:驱动程序是否应在PreparedStatement.setDouble()中允许NaN或+/- INF值?默认值false
(60)autoDeserialize:驱动程序是否应自动检测并串并转换保存在BLOB字段中的对象?默认值:false
(61)capitalizeTypeNames:是否将DatabaseMetaData中的类型名转换为大写? 通常仅在使用WebObjects时有用,真/假。默认为“假”。默认值:false
(62)clobberStreamingResults:这会使“流式”结果集被自动关闭,如果在所有数据尚未从服务器中读取完之前,执行了另一查询,正在从服务器流出的任何未完成数据均将丢失。默认值:false
(63)continueBatchOnError:如果一条语句失败,驱动程序是否应继续处理批命令? JDBC规范允许任何一种方式(默认为“真”)。默认值:true
(64)createDatabaseIfNotExist:如果不存在,创建URL中给定的数据库。假定用户具有创建数据库的权限。默认值false
(65)emptyStringsConvertToZero:驱动程序是否应允许从空字符串字段到数值“0”的转换?默认值:true
(66)emulateLocators:驱动程序应该使用定位器模拟java.sql.Blobs吗?启用此功能后,驱动程序将延迟加载实际的Blob数据,直到访问了blob数据流上的检索方法之一(getInputStream(),getBytes()等)。默认值:false
(67)emulateUnsupportedPstmts:驱动程序是否应检测不被服务器支持的预处理语句,并用客户端模拟版替换它们?默认值:true
(68)ignoreNonTxTables:是否忽略关于回退的非事务表? 默认值为“假”。默认值:false
(69)jdbcCompliantTruncation:连接到支持告警的服务器时(MySQL 4.1.0和更高版本),当按照JDBC的要求截短数据时,驱动程序是否应抛出java.sql.DataTruncation异常?默认值:true
(70)maxRows:返回的最大行数(0,默认值表示返回所有行)。默认值:-1
(71)noDatetimeStringSync:不保证ResultSet.getDatetimeType().toString().equals(ResultSet.getString()。默认值:false
(72)nullCatalogMeansCurrent:当DatabaseMetadataMethods请求“目录”参数时,值“Null”是否意味着使用当前目录? 它不兼容JDBC,但符合驱动程序早期版本的传统行为。默认值:true
(73)nullNamePatternMatchesAll:接受*pattern参数的DatabaseMetaData方法是否应将null按对待“%”的相同方式处理(不兼容JDBC,但驱动程序的早期版本能接受与规范的这类偏离)。默认值:true
(74)Pedantic:严格遵守JDBC规范。默认值:false
(75)relaxAutoCommit:如果驱动程序所连接的MySQL服务器的版本不支持事务,仍允许调用commit()、rollback()和setAutoCommit()?真/假,默认值:false。
(76)retainStatementAfterResultSetClose:调用ResultSet.close()后,驱动程序是否应将语句引用保存在结果集中? 在JDBC-4.0后,与JDBC不兼容。默认值:true
(77)rollbackOnPooledClose:当连接池中的逻辑连接关闭时,驱动程序是否应发出rollback()?默认值:true
(78)runningCTS13:允许在Sun与JDBC兼容的testsuite 1.3版中处理缺陷。默认值:false
(79)serverTimezone:覆盖时区的检测/映射。当服务器的时区为映射到Java时区时使用 默认值:无
(80)strictFloatingPoint:仅在兼容性测试的早期版本中使用。默认值:false
(81)strictUpdates:驱动程序是否应对可更新结果集进行严格检查(选择所有的主键)?默认值:true
(82)tinyInt1isBit:驱动程序是否应将数据类型TINYINT(1)当作BIT类型对待?创建表时,服务器会执行BIT -> TINYINT(1)操作。默认值:true
(83)transformedBitIsBoolean:如果驱动程序将TINYINT(1)转换为不同的类型,为了与MySQL-5.0兼容,驱动程序是否应使用BOOLEAN取代BIT?这是因为MySQL-5.0具有BIT类型。默认值:false
(84)ultraDevHack:由于UltraDev已损坏,并为所有语句发出了prepareCall(),需要时,是否要为prepareCall()创建PreparedStatements?默认值:false
(85)useHostsInPrivileges:在DatabaseMetaData.getColumn/TablePrivileges()中为用户添加“@hostname”。真/假,默认为“真”。默认值:true
(86)useOldUTF8Behavior:与4.0和更早版本的服务器进行通信时,使用UTF-8。默认值:false
(87)useOnlyServerErrorMessages:对服务器返回的错误消息,不事先设定“标准的”SQLState错误消息。默认值:true

(89)useSqlStateCodes:使用SQL标准状态码取代“传统的”X/Open/SQL状态码。默认值:true 
(90)useStreamLengthsInPrepStmts:是否采用PreparedStatement/ResultSet.setXXXStream()方法调用中的流长度参数?默认值:true
(91)useTimezone:是否在客户端和服务器时区间转换时间/日期类型。默认值:false
(92)useUnbufferedInput:不使用BufferedInputStream来从服务器读取数据。默认值:true
(93)yearIsDateType:JDBC驱动程序是否应将MySQL类型“YEAR”当作java.sql.Date或SHORT对待?默认值:true
(94)zeroDateTimeBehavior:当驱动程序遇到全由0组成的DATETIME值时,应出现什么?MySQL使用它来表示无效日期。有效值是“exception”、“round”和“convertToNull”。默认值:exception。

发布了52 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/YKWNDY/article/details/105088699
今日推荐