1.ShardingSphere 4.x FAQ
2.Hibernateå
ä½ç¨è¯¦è§£
3.proxool配置数据连接池时为什么不可配置houseKeepingSleepTime
4.请问dom4j.jar的作用是什么?
ShardingSphere 4.x FAQ
在ShardingSphere中,如果SQL执行不正确,首先需要开启sql.show配置,它在Sharding-Proxy以及Sharding-JDBC 1.5.0版本之后提供了帮助。此配置默认关闭,开启后,netty源码游戏系统会将SQL解析上下文、改写后的SQL以及最终路由至的数据源的详细信息打印至info日志,方便调试。
遇到源码编译错误时,应了解ShardingSphere使用lombok实现代码简化,具体使用和安装细节可参考lombok官网。sharding-orchestration-reg模块需要先执行mvn install命令,根据protobuf文件生成gRPC相关的java文件。
在使用Spring命名空间时,若找不到xsd文件,其实Spring命名空间使用规范并未强制要求部署至公网地址。但考虑到部分用户的需求,相关xsd文件也部署至ShardingSphere官网。sharding-jdbc-spring-namespace的jar包中配置了xsd文件的位置,确保jar包内存在该文件即可。
对于Cloud not resolve placeholder异常,使用行表达式标识符建议使用$->{ ...},避免与Spring本身的属性文件占位符冲突。
在使用inline表达式时,注意Java的专精源码狂风整数相除结果为整数,而inline表达式中的Groovy语法则返回浮点数。若需要获得除法整数结果,请使用A.intdiv(B)。
若只有部分数据库分库分表,确实需要将不分库分表的表配置在分片规则中。ShardingSphere会将多个数据源合并为一个逻辑数据源,不配置分片规则会导致无法准确判断应路由至哪个数据源。这时,可以采用配置default-data-source的方式,或单独管理不参与分库分表的数据源。
除了支持自带的分布式自增主键,ShardingSphere也能支持原生的自增主键。但需注意,原生自增主键不能同时作为分片键使用。由于ShardingSphere不知晓数据库表结构,原生自增主键不在原始SQL中,无法将其解析为分片字段。若自增主键非分片键,则无需关注;若作为分片键,ShardingSphere无法解析其分片值,可能导致SQL路由至多张表。
指定泛型为Long的SingleKeyTableShardingAlgorithm遇到ClassCastException问题,确保数据库表中字段与分片算法中的字段类型一致。例如,数据库中字段为int类型时,ss指标源码分片类型应为Integer,而非Long。
在SQLSever和PostgreSQL中,聚合列未加别名可能会抛出异常。这是因为这些数据库会自动为聚合列改名,ShardingSphere在结果归并时可能找不到相应的列。正确的SQL写法应包含别名。
在Oracle数据库使用Timestamp类型的OrderBy语句时,可能会抛出异常。解决方式是配置启动参数oracle.jdbc.J2EECompliant=true,或在项目初始化时设置System.getProperties().setProperty(“oracle.jdbc.J2EECompliant”, “true”);
使用Proxool配置多个数据源时,需要为每个数据源设置alias,以避免每次都从一个数据源获取连接。具体实现方法请参考Proxool官网。
ShardingSphere采用snowflake算法作为默认的分布式自增主键策略,这确保了分布式环境下生成的自增序列递增但不连续,且尾数多为偶数。在3.1.0版本中,尾数为偶数的问题已被解决。
在Windows环境下通过Git克隆ShardingSphere源码时,可能会遇到文件名过长的问题。为了解决,可执行特定命令启用Git对长文件名的支持,或通过注册表或组策略解除操作系统文件名长度限制。
若在运行Sharding-Proxy时找不到或无法加载主类org.apache.shardingshpere.shardingproxy.Bootstrap,源码城里面的源码是真的吗可能是因为解压工具将文件名截断。解决方法是执行特定命令。
若实现了ShardingKeyGenerator接口但配置了Type却未生效,需要确保在META-INF/services中创建对应文件指定SPI实现类,或在配置中正确指定类型。ShardingSphere的扩展功能需要通过SPI注入才能生效。
当JPA与数据脱敏一起使用时,由于数据脱敏的DDL尚未完成,导致JPA实体类无法同时满足DDL和DML。解决方案需根据具体需求进行调整。
在配置了某个数据连接池的spring-boot-starter(如druid)和sharding-jdbc-spring-boot-starter后,系统启动报错可能是因为两者间的兼容性问题。应检查配置文件和依赖版本,确保兼容性。
在使用sharing-proxy时,动态在sharding-ui上添加新的logic schema,可通过sharding-ui的API实现,具体操作请参考sharding-ui文档。
在使用sharing-proxy时,使用合适的工具连接proxy通常取决于具体需求和环境,常见的连接工具包括JDBC客户端、命令行工具等,需根据实际场景选择。
Hibernateå ä½ç¨è¯¦è§£
ããHibernateä¸å ±å æ¬äº 个jarå 令人ç¼è±ç¼ä¹± æ¬æå°è¯¦ç»è®²è§£Hibernateæ¯ä¸ªjarå çä½ç¨ 便äºä½ å¨åºç¨ä¸æ ¹æ®èªå·±çéè¦è¿è¡åèããä¸è½½Hibernate ä¾å¦ 稳å®çæ¬ è§£å缩 å¯ä»¥çå°ä¸ä¸ªhibernate jarålibç®å½ä¸æ 个jarå
ããhibernate jar:
ããHibernateçåº æ²¡æä»ä¹å¯è¯´ç å¿ é¡»ä½¿ç¨çjarå
ããcglib a *** jar:
ããCGLIBåº Hibernateç¨å®æ¥å®ç°POåèç çå¨æçæ éå¸¸æ ¸å¿çåº å¿ é¡»ä½¿ç¨çjarå
ããdom j jar:
ããdom jæ¯ä¸ä¸ªJavaçXML API 类似äºjdom ç¨æ¥è¯»åXMLæ件ç dom jæ¯ä¸ä¸ªé常é常ä¼ç§çJava XML API å ·ææ§è½ä¼å¼ åè½å¼ºå¤§åæ端æç¨ä½¿ç¨çç¹ç¹ åæ¶å®ä¹æ¯ä¸ä¸ªå¼æ¾æºä»£ç ç软件 å¯ä»¥å¨SourceFeä¸æ¾å°å® å¨IBM developerWorksä¸é¢å¯ä»¥æ¾å°ä¸ç¯æç« å¯¹ä¸»æµçJava XML APIè¿è¡çæ§è½ åè½åæç¨æ§çè¯æµ dom jæ 论å¨é£ä¸ªæ¹é¢é½æ¯é常åºè²ç ææ©å¨å°è¿ä¸¤å¹´ä¹åå°±å¼å§ä½¿ç¨dom j ç´å°ç°å¨ å¦ä»ä½ å¯ä»¥çå°è¶æ¥è¶å¤çJava软件é½å¨ä½¿ç¨dom jæ¥è¯»åXML ç¹å«å¼å¾ä¸æçæ¯è¿SunçJAXMä¹å¨ç¨dom j è¿æ¯å¿ 须使ç¨çjarå Hibernateç¨å®æ¥è¯»åé ç½®æ件
ããodmg jar:
ããODMGæ¯ä¸ä¸ªORMçè§è Hibernateå®ç°äºODMGè§è è¿æ¯ä¸ä¸ªæ ¸å¿çåº å¿ é¡»ä½¿ç¨çjarå
ããmons collections jar
ããApache Commonså ä¸çä¸ä¸ª å å«äºä¸äºApacheå¼åçéåç±» åè½æ¯java util *强大 å¿ é¡»ä½¿ç¨çjarå
ããmons beanutils jar
ããApache Commonså ä¸çä¸ä¸ª å å«äºä¸äºBeanå·¥å ·ç±»ç±» å¿ é¡»ä½¿ç¨çjarå
ããmons lang jar:
ããApache Commonså ä¸çä¸ä¸ª å å«äºä¸äºæ°æ®ç±»åå·¥å ·ç±» æ¯java lang *çæ©å± å¿ é¡»ä½¿ç¨çjarå
ããmons logging jar:
ããApache Commonså ä¸çä¸ä¸ª å å«äºæ¥å¿åè½ å¿ é¡»ä½¿ç¨çjarå è¿ä¸ªå æ¬èº«å å«äºä¸ä¸ªSimple Logger ä½æ¯åè½å¾å¼± å¨è¿è¡çæ¶åå®ä¼å å¨CLASSPATHæ¾log j å¦ææ 就使ç¨log j å¦æ没æ å°±æ¾JDK 带çjava util logging å¦æä¹æ¾ä¸å°å°±ç¨Simple Logger mons logging jarçåºç°æ¯ä¸ä¸ªåå²ççéççéæ¾ å½åApacheæå游说Sunælog jå å ¥JDK ç¶èJDK 项ç®å°ç»å·²ç»æ¥è¿åå¸JDK 产åçæ¶é´äº å æ¤æç»äºApacheçè¦æ± 使ç¨èªå·±çjava util logging è¿ä¸ªå çåè½æ¯log jå·®çå¾è¿ æ§è½ä¹ä¸è¬
ããåæ¥Apacheå°±å¼ååºæ¥äºmons logging jarç¨æ¥å ¼å®¹ä¸¤ä¸ªlogger å æ¤ç¨mons logging jaråçlogç¨åº åºå±çLoggeræ¯å¯ä»¥åæ¢ç ä½ å¯ä»¥éæ©log j java util loggingæè å®èªå¸¦çSimple Logger ä¸è¿æä»ç¶å¼ºç建议使ç¨log j å 为log jæ§è½å¾é« logè¾åºä¿¡æ¯æ¶é´å ä¹çäºSystem out èå¤çä¸æ¡logå¹³ååªéè¦ us ä½ å¯ä»¥å¨Hibernateçsrcç®å½ä¸æ¾å°Hibernateå·²ç»ä¸ºä½ åå¤å¥½äºçlog jçé ç½®æ件 ä½ åªéè¦å°Apache ç½ç«å»ä¸è½½log jå°±å¯ä»¥äº mons logging jarä¹æ¯å¿ é¡»çjarå
ãã使ç¨Hibernateå¿ é¡»çjarå å°±æ¯ä»¥ä¸çè¿å 个 å©ä¸çé½æ¯å¯éç
ããant jar:
ããAntç¼è¯å·¥å ·çjarå ç¨æ¥ç¼è¯Hibernateæºä»£ç ç å¦æä½ ä¸åå¤ä¿®æ¹åç¼è¯Hibernateæºä»£ç é£ä¹å°±æ²¡æä»ä¹ç¨ å¯éçjarå
ããoptional jar
ããAntçä¸ä¸ªè¾ å©å
ããc p jar
ããC POæ¯ä¸ä¸ªæ°æ®åºè¿æ¥æ± Hibernateå¯ä»¥é 置为使ç¨C POè¿æ¥æ± å¦æä½ åå¤ç¨è¿ä¸ªè¿æ¥æ± å°±éè¦è¿ä¸ªjarå
ããproxool jar
ããä¹æ¯ä¸ä¸ªè¿æ¥æ± åä¸
ããmons pool jar mons dbcp jar:
ããDBCPæ°æ®åºè¿æ¥æ± ApacheçJakartaç»ç»å¼åç Tomcat çè¿æ¥æ± ä¹æ¯DBCP
ããå®é ä¸Hibernateèªå·±ä¹å®ç°äºä¸ä¸ªé常é常ç®åçæ°æ®åºè¿æ¥æ± å ä¸ä¸é¢ 个 ä½ å®é ä¸å¯ä»¥å¨Hibernateä¸éæ© ç§ä¸åçæ°æ®åºè¿æ¥æ± éæ©åªä¸ä¸ªç个人çå好 ä¸è¿DBCPå¯è½æ´éç¨ä¸äº å¦å¤å¼ºè°ä¸ç¹ å¦æå¨EJBä¸ä½¿ç¨Hibernate ä¸å®è¦ç¨App Serverçè¿æ¥æ± ä¸è¦ç¨ä»¥ä¸ ç§è¿æ¥æ± å¦å容å¨ç®¡çäºå¡ä¸èµ·ä½ç¨
ããconnector jar:
ããJCA è§è å¦æä½ å¨App Serverä¸æHibernateé 置为Connectorçè¯ å°±éè¦è¿ä¸ªjar ä¸è¿å®é ä¸ä¸è¬App Serverè¯å®ä¼å¸¦ä¸è¿ä¸ªå æ以å®é ä¸æ¯å¤ä½çå
ããjaas jar:
ããJAASæ¯ç¨æ¥è¿è¡æééªè¯ç å·²ç»å å«å¨JDK éé¢äº æ以å®é ä¸æ¯å¤ä½çå
ããjcs jar
ããå¦æä½ åå¤å¨Hibernateä¸ä½¿ç¨JCSçè¯ é£ä¹å¿ é¡»å æ¬å® å¦åå°±ä¸ç¨
ããjdbc _ stdext jar:
ããJDBC çæ©å±å ä¸è¬æ¥è¯´æ°æ®åºè¿æ¥æ± ä¼ç¨ä¸å® ä¸è¿App Serveré½ä¼å¸¦ä¸ æ以ä¹æ¯å¤ä½ç
ããjta jar
ããJTAè§è å½Hibernate使ç¨JTAçæ¶åéè¦ ä¸è¿App Serveré½ä¼å¸¦ä¸ æ以ä¹æ¯å¤ä½ç
ããjunit jar:
ããJunitå å½ä½ è¿è¡Hibernateèªå¸¦çæµè¯ä»£ç çæ¶åéè¦ å¦åå°±ä¸ç¨
ããxalan jar xerces jar xml apis jar:
lishixinzhi/Article/program/Java/ky//proxool配置数据连接池时为什么不可配置houseKeepingSleepTime
有缘碰到和你一样的问题,这是燕窝国内溯源码和企业溯源码我搜到的,希望有所帮助
本人在配置PROXOOL联接池时,发现一个奇怪的事情。。
以前在配置文件时,可以直接设置
houseKeepingSleepTime属性,但是在用proxool-0.9.1时,发现有些属性是不允许你设置的。。
在你配置完成后,运行时,会发现说这个属性不是可写的。。
其后本人把proxool-0.9.1源代码下来了 .有个奇怪的地方:
Java代码
private long houseKeepingSleepTime;
private long maximumConnectionLifetime
/**
* @see ConnectionPoolDefinitionIF#getHouseKeepingSleepTime
*/
public long getHouseKeepingSleepTime() {
return houseKeepingSleepTime;
}
/**
* @see ConnectionPoolDefinitionIF#getHouseKeepingSleepTime
*/
public void setHouseKeepingSleepTime(int houseKeepingSleepTime) {
this.houseKeepingSleepTime = houseKeepingSleepTime;
}
/**
* @see ConnectionPoolDefinitionIF#getMaximumConnectionLifetime
*/
public long getMaximumConnectionLifetime() {
return maximumConnectionLifetime;
}
/**
* @see ConnectionPoolDefinitionIF#getMaximumConnectionLifetime
*/
public void setMaximumConnectionLifetime(int maximumConnectionLifetime) {
this.maximumConnectionLifetime = maximumConnectionLifetime;
}
private long houseKeepingSleepTime;
private long maximumConnectionLifetime
/
*** @see ConnectionPoolDefinitionIF#getHouseKeepingSleepTime
*/
public long getHouseKeepingSleepTime() {
return houseKeepingSleepTime;
}
/
*** @see ConnectionPoolDefinitionIF#getHouseKeepingSleepTime
*/
public void setHouseKeepingSleepTime(int houseKeepingSleepTime) {
this.houseKeepingSleepTime = houseKeepingSleepTime;
}
/
*** @see ConnectionPoolDefinitionIF#getMaximumConnectionLifetime
*/
public long getMaximumConnectionLifetime() {
return maximumConnectionLifetime;
}
/
*** @see ConnectionPoolDefinitionIF#getMaximumConnectionLifetime
*/
public void setMaximumConnectionLifetime(int maximumConnectionLifetime) {
this.maximumConnectionLifetime = maximumConnectionLifetime;
}
这是为何
下面是源代码中作者对文件做的修改说明:
Revision 1.9 // :: billhorsman
Changed time (millisecond) properties from int to long: maximumConnectionLifetime, houseKeepingSleepTime, recentlyStartedThreshold, overloadWithoutRefusalLifetime, maximumActiveTime
不知道是不是下一个版本准备把接收INT值改为long值
百思不得其解。。最后还是用proxool-0.9.0sr2 就没有这个问题。。。。
请问dom4j.jar的作用是什么?
hibernate2.jar:
Hibernate的库,没有什么可说的,必须使用的jar包
cglib-asm.jar:
CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包
dom4j.jar:
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j,直到现在。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包, Hibernate用它来读写配置文件。
odmg.jar:
ODMG是一个ORM的规范,Hibernate实现了ODMG规范,这是一个核心的库,必须使用的jar包。
commons-collections.jar:
Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。
commons-beanutils.jar:
Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。
commons-lang.jar:
Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。
commons-logging.jar:
Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本身包含了一个Simple Logger,但是功能很弱。在运行的时候它会先在CLASSPATH找log4j,如果有,就使用log4j,如果没有,就找JDK1.4带的 java.util.logging,如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾,当初Apache极力游说Sun把log4j加入JDK1.4,然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了Apache的要求,使用自己的java.util.logging,这个包的功能比log4j差的很远,性能也一般。
后来Apache就开发出来了commons-logging.jar用来兼容两个 logger。因此用commons-logging.jar写的log程序,底层的Logger是可以切换的,你可以选择log4j, java.util.logging或者它自带的Simple Logger。不过我仍然强烈建议使用log4j,因为log4j性能很高,log输出信息时间几乎等于System.out,而处理一条log平均只需要5us。你可以在Hibernate的src目录下找到Hibernate已经为你准备好了的log4j的配置文件,你只需要到Apache 网站去下载log4j就可以了。commons-logging.jar也是必须的jar包。
使用Hibernate必须的jar包就是以上的这几个,剩下的都是可选的。
ant.jar:
Ant编译工具的jar包,用来编译Hibernate源代码的。如果你不准备修改和编译Hibernate源代码,那么就没有什么用,可选的jar包
optional.jar:
Ant的一个辅助包。
c3p0.jar:
C3PO是一个数据库连接池,Hibernate可以配置为使用C3PO连接池。如果你准备用这个连接池,就需要这个jar包。
proxool.jar:
也是一个连接池,同上。
commons-pool.jar, commons-dbcp.jar:
DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCP。
实际上Hibernate自己也实现了一个非常非常简单的数据库连接池,加上上面3个,你实际上可以在Hibernate上选择4种不同的数据库连接池,选择哪一个看个人的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中使用Hibernate,一定要用App Server的连接池,不要用以上4种连接池,否则容器管理事务不起作用。
connector.jar:
JCA 规范,如果你在App Server上把Hibernate配置为Connector的话,就需要这个jar。不过实际上一般App Server肯定会带上这个包,所以实际上是多余的包。
jaas.jar:
JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。所以实际上是多余的包。
jcs.jar:
如果你准备在Hibernate中使用JCS的话,那么必须包括它,否则就不用。
jdbc2_0-stdext.jar:
JDBC2.0的扩展包,一般来说数据库连接池会用上它。不过App Server都会带上,所以也是多余的。
jta.jar:
JTA规范,当Hibernate使用JTA的时候需要,不过App Server都会带上,所以也是多余的。
junit.jar:
Junit包,当你运行Hibernate自带的测试代码的时候需要,否则就不用。
xalan.jar, xerces.jar, xml-apis.jar:
Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会带上,JDK1.4也包含了解析器,不过不是Xerces,是Crimson,效率比较差,不过Hibernate用XML只不过是读取配置文件,性能没什么紧要的,所以也是多余的。