jdbc14 及 jdbc16 共存所带来的问题【未完待续】
在JAVA中JDK版本号与JDBC版本号的一致性十分重要,开发都们经常会忽略了这一点导致非常多不必要的错误。
昨天给客户排查了一个关于EDB在JBoss中使用时关于这方面的问题,希望给大家一点启示。
系统环境:
Red Hat Enterpirse Linux 6
JBoss Enterprise Application Server 6
EnterpriseDB Postgres Plus Advanced Server 9
Oracle JDK 1.6
问题症状:
在JBoss日志中间歇性地出现下面错误
java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/jdbc/DSZY101----Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection
for java:/jdbc/DSZY101-- at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:390)-- at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)--
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)-- at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)-- at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)--
at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)-- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)--
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)-- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)--
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)-- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)-- at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)-- at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)-- at java.lang.Thread.run(Thread.java:662)----Caused by: javax.resource.ResourceException: IJ000658: Unexpected throwable while trying to create a connection: null-- at
org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:371)-- at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)--
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)-- at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)-- at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)--
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)-- at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)-- at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)--
at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)-- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)--
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)-- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)--
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)-- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)-- at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)-- at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)-- at java.lang.Thread.run(Thread.java:662)----Caused by: javax.resource.ResourceException: Could not create connection-- at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:277)--
at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:235)-- at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:761)--
at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:343)-- at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)--
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)-- at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)-- at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)--
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)-- at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)-- at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)--
at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)-- at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)-- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)--
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)-- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)--
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)-- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)-- at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)-- at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)-- at java.lang.Thread.run(Thread.java:662)----Caused by: com.edb.util.PSQLException: The connection attempt failed.-- at com.edb.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:189)--
at com.edb.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)-- at com.edb.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:161)-- at com.edb.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)--
at com.edb.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:23)-- at com.edb.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)-- at com.edb.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:25)-- at com.edb.Driver.makeConnection(Driver.java:391)--
at com.edb.Driver.connect(Driver.java:266)-- at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:249)-- at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:235)--
at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:761)-- at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:343)--
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)-- at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)-- at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)--
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)-- at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)--
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)-- at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)-- at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)--
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)-- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--
at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)-- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--
at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)-- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)-- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)-- at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)--
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)-- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)--
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)-- at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)-- at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)-- at java.lang.Thread.run(Thread.java:662)----Caused by: java.net.SocketException: Too many open files-- at java.net.Socket.createImpl(Socket.java:397)-- at java.net.Socket.<init>(Socket.java:371)--
at java.net.Socket.<init>(Socket.java:189)-- at com.edb.core.PGStream.<init>(PGStream.java:70)-- at com.edb.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:115)-- at com.edb.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)--
at com.edb.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:161)-- at com.edb.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)-- at com.edb.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:23)--
at com.edb.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)-- at com.edb.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:25)-- at com.edb.Driver.makeConnection(Driver.java:391)-- at com.edb.Driver.connect(Driver.java:266)-- at
org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:249)-- at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:235)--
at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:761)-- at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:343)--
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)-- at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)-- at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)--
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)-- at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)--
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)-- at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)-- at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)--
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)-- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--
at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)-- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--
at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)-- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)-- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)-- at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)--
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)-- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)--
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)-- at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)-- at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)-- at java.lang.Thread.run(Thread.java:662)--
E 2014-06-15 20:27:44.272 XML - 0 - -
问题分析:
- 从上面的错误代码中可见“javax.resource.ResourceException: IJ000658: Unexpected throwable while trying to create a connection: null”。从经验上推断这可能是因为JDK版本号与JDBC不匹配所造成的。当前各数据库都有类似的操作方式,通常针对JDK 1.6下面版本号,及1.6以上版本号会公布不同的JDBC驱动包。以EDB为例会有:
edb-jdbc14.jar 相应 JDK1.6下面版本号。
edb-jdbc16.jar 相应 JDK1.6及以上版本号。 - 由以上怀疑点要求客户调出系统中存放JDBC驱动的文件夹。发如今此文件夹下同一时候存在以上两个版本号的jar文件,同一时候此文件夹中有一个module.xml文件。其中内存例如以下:
<
module
xmlns
=
"urn:jboss:module:1.0"
name
=
"com.edb"
>
<
resources
>
<
resource-root
path
=
"edb-jdbc16.jar"
/>
</
resources
>
<
dependencies
><
module
name
=
"javax.api"
/></
dependencies
>
</
module
>
从此文件里能够看到JBoss中已经明白指定使用edb-jdbc16.jar。因此即使文件夹中同一时候也有edb-jdbc14.jar,JBoss应该是不会对它进行调用的。
- 进一步分析,客户告知在他们的代码中有可能出现下面操作:
Class.forName("com.edb.Driver");
String url = "jdbc:edb://xxx.xxx.xxx.xxx:5444/edb";
String user = "enterprisedb";
String password = "xxxxxxx";
Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM emp");
......
由此判断假设客户代码中存在以上操作。在执行此操作时将不授JBoss中的配置影响而直接通过JDK调用能够找到的JDBC。因为文件夹中存在edb-jdbc14.jar,而从文件夹的搜索角度14排在16之前,因此程序在执行以上操作时非常可能会使用了edb-jdbc14.jar。在JAVA进行数据序列化操作时,因版本号不正确应就有可能产生以上问题。这就解析了为何仅仅有少量操作报连接无法找到而不是所有数据库连接均报错。
- 进一步检查在还有一套客户的測试环境中没有出现以上错误。而此測试环境下仅仅有edb-jdbc16.jar驱动
- 从EDB数据库方面分析。在数据库日志中并没有在此上述时段收到连接,也没有对应错误。
推断:JAVA端在获得连接Socketport后因为版本号不正确应,无法序列化,因此可能根本上就没有发送username、password等登陆信息。因此数据库没有不论什么日志。
- 综上所述基本定位问题所在
分析图解:
解决方式:
- 申请停机时间。进行完整測试及修复。
- 建议将文件夹中的edb-jdbc14.jar删除;
- 严格保证日后全部项目中相应一个数据库仅仅有一个JDBC;
- 在JBoss框架下严格使用JNDI或其它公共方式进行连接,避免在JAVA程序中通过直接调用getConnection方式进行数据库连接;
解决结果【未进行】:
当前以上所暴露的问题仅仅是一个判断。因为客户当前是一个生产系统,无法现场进行測试及修复。【未完待续】
jdbc14 及 jdbc16 共存所带来的问题【未完待续】的更多相关文章
- 记一次struts2漏洞修复带来的问题
struts2作为万年漏洞王,感觉已经被弃如敝屣了,除了一些古老的项目,比如我手上的一个项目,以前每次出现漏洞就如临大敌,手忙脚乱的赶在公司红头文件发出来前修复它.然后改了一两次后毅然决然用别的框架代 ...
- 4G通信技术LTE介绍
参考文档在这里 LTE技术 LTE是继GSM/EDGE和UMTS/HSxPA之后的由3GPP推出的移动网络技术最新标准,属于4G. 未来网络需要更高的数据速率,和包路由优化系统.更好的QoA和更廉价的 ...
- VR与AR的发展趋势分析
概要 你是否想象过与神秘的深海生物近距离接触?你是否梦想过穿戴钢铁侠那样的超先进科技装备成为超级英雄?你又是否幻想过与梦中的女神面对面的交流?这些可能在以前都只能是存在于脑海中的幻想,可是在如今有一项 ...
- (转)mysql、innodb和加锁分析
mysql.innodb和加锁分析 原文:https://liuzhengyang.github.io/2016/09/25/mysqlinnodb/ 介绍 本文主要介绍MySQL和InnoDB存储引 ...
- 剖析虚幻渲染体系(15)- XR专题
目录 15.1 本篇概述 15.1.1 本篇内容 15.1.2 XR概念 15.1.2.1 VR 15.1.2.2 AR 15.1.2.3 MR 15.1.2.4 XR 15.1.3 XR综述 15. ...
- 微信小程序开发心得
微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...
- Unity C#最佳实践(上)
本文为<effective c#>的读书笔记,此书类似于大名鼎鼎的<effective c++>,是入门后提高水平的进阶读物,此书提出了50个改进c#代码的原则,但是由于主要针 ...
- [ 技术人员创业Tips ] 1:抓住优质客户(上)
写一篇技术以外的内容,可能会得罪一些人,轻拍,此外本文写的比较随意,写到哪里算哪里,轻拍. IT业不知道从什么时候起特别流行谈创业,似乎不谈创业就落伍,我不评价这种风气的好坏,只提一些自己的一些经验和 ...
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
随机推荐
- linux执行shell脚本时提示bad interpreter:No such file or directory的解决办法
故障现象:在终端直接cd /var正常,在shell脚本中执行则报错.原因是脚本是在windows平台下写的,换行符与Linux不同,造成脚本不能正确执行 出现bad interpreter:No s ...
- 双系统下Ubuntu安装教程
一.下载Ubuntu镜像包 二.用老毛桃制作U盘启动盘 三.下载Universal USB Installer 下载后无需安装,直接运行Universal USB Installer, step1: ...
- Spark任务调度
不多说,直接上干货! Spark任务调度 DAGScheduler 构建Stage—碰到shuffle就split 记录哪个RDD 或者Stage 输出被物化 重新提交shuffle 输出丢失的sta ...
- Spark RDD概念学习系列之典型RDD的特征
不多说,直接上干货!
- 【译文】采用chrome的DevTool中TimeLine和profile工具提升Web app性能
->译文,原文在这里<- 本文地址: http://www.cnblogs.com/blackmanba/p/web-perfomance-with-Chrome-DevTools.htm ...
- CSS3中的2D和3D转换知识介绍
一 2D转换 转换是CSS3中具有颠覆性的特征之一,可以实现元素的位移.旋转.变形.缩放,甚至支持矩阵方式,配合即将学习的过渡和动画知识,可以取代大量之前只能靠Flash才可以实现的效果. 1.移动 ...
- Function 和 eval 知识点总结
1 Function 1.1 函数的创建方式 1 函数声明 2 函数表达式 3 new Function // 1 function foo() {} // 2 var foo = function( ...
- Typescript 模拟实现 多继承
class Animal{ eat():void{ alert("animal eat"); } } class Mamal extends Animal{ breathe() : ...
- hdu 1532 Drainage Ditches 【ISAP 】
还是不是很懂算法 先存一个模板先吧--- 看的这篇学的-- http://www.renfei.org/blog/isap.html #include<cstdio> #include&l ...
- 其他信息: 具有固定名称“Npgsql”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载。有关详细信息,请参阅内部异常
其他信息: 具有固定名称“Npgsql”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载.有关详细信息,请参阅内部异常 解决方法 在 App.config 的 configur ...