package jef.database; import jef.common.Configuration.ConfigItem; /** * 数据库配置的枚举 * @author Jiyi * */ public enum DbCfg implements ConfigItem { /** * 数据库文本编码,当将String转为BLOB时,或者在计算字符串插入数据库后的长度时使用(java默认用unicode,中文英文都只占1个字符) */ DB_ENCODING, /** * 在日志中,当文本过长的时候是不完全输出的,此时要输出文本的长度。可能影响性能 */ DB_ENCODING_SHOWLENGTH, /** * 数据库查询最大条数限制,默认0,表示不限制 */ DB_MAX_RESULTS_LIMIT, /** * 数据库查询超时,单位秒,默认60 */ DB_SELECT_TIMEOUT, /** * 数据库查询超时,单位秒,默认60<br/> * 实际操作中各种存储过程和自定义的SQL语句也大多使用此超时判断 */ DB_UPDATE_TIMEOUT, /** * 数据库删除超时,单位秒,默认60<br/> */ DB_DELETE_TIMEOUT, /** * schema重定向功能(特色) */ SCHEMA_MAPPING, /** * 多数据源支持:数据源名称重定向表(特色) */ DB_DATASOURCE_MAPPING, /** * 取消支持多数据源,原先配置的数据源绑定等功能都映射到当前数据源上 * 默认false */ DB_SINGLE_DATASOURCE, /** * 分表和路由规则加载器类.默认会使用基于class的annotation加载器,也可以使用资源文件<br/> * 默认实现类:jef.database.meta.PartitionStrategyLoader$DefaultLoader<br/> * 使用者可以实现jef.database.meta.PartitionStrategyLoader编写自己的分表规则加载器。 * 甚至可以使用外部资源乃至数据库数据。 */ PARTITION_STRATEGY_LOADER, /** * 是否根据事务参数去设置事务的隔离级别。 * 默认开启,可以禁用。当碰到某些不支持设置事务隔离级别的驱动时,可以关闭此开关。 */ DB_SET_ISOLATION, /** * <h3>扩展点,配置自定义的元数据加载器</h3> * 元数据默认现在都是配置在类的注解中的,使用自定义的读取器可以从其他更多的地方读取元数据配置。 * 可以自行编写一个类实现jef.database.meta.AnnotationProvider,从而实现自定义的元数据加载方式 */ CUSTOM_METADATA_LOADER, /** * <h3>内建的METADATA加载器可以从外部资源文件XML中读取元数据配置</h3> * 如果此选项不配置任何内容,那么就取消外部元数据资源加载功能。 * * 可以配置为 /hbm/%s.hbm.xml * 上面的%s表示类的简单名 %c表示类的全名 %*表示搜索全部符合条件的资源并根据其中的 class属性自动匹配。 */ METADATA_RESOURCE_PATTERN, /** * true禁用分表功能 * 默认false * @deprecated 尚未使用 */ PARTITION_DISABLED, /** * 将resultset的数据先放入缓存,再慢慢解析(Iterated操作除外)。这一配置会增加内存开销,但使得每次查询占用连接的时间更少。 */ DB_CACHE_RESULTSET, /** * 在batch操作时,为效率计,不会打印出全部项的参数。 * 在批量操作时日志中打印出的最多的参数组,默认5 */ DB_MAX_BATCH_LOG, /** * 自动转换表名(为旧版本保留,如果用户没有通过JPA配置对象与表名的关系,那么开启此选项后, userId -> USER_ID, 否则userId -> USERID */ TABLE_NAME_TRANSLATE, /** * String,配置Blob的返回类型,支持 string/byte/stream/file 四种,默认为stream */ DB_BLOB_RETURN_TYPE, //////////////////内嵌连接池相关设置///////////////// /** * 不使用内嵌的连接池,当DataSource自带连接池功能的时候使用此配置。一旦开启此配置,后续的连接池相关设定全部无效 * 可以設置為 true. false auto 三種值 */ DB_NO_POOL, /** * JEF内嵌连接池额定连接数,数字,默认值3 */ DB_CONNECTION_POOL, /** * JEF内嵌连接池最大连接数,数字,默认50 */ DB_CONNECTION_POOL_MAX, /** * JEF内嵌连接池调试开关,默认false,开启后输出连接池相关日志 */ DB_POOL_DEBUG, /** * JEF内嵌连接池心跳时间,按此间隔对连接进行扫描检查,单位毫秒。默认120秒 */ DB_HEARTBEAT, /** * 每个连接最小生存时间 */ DB_CONNECTION_LIVE, /////////////////默认连接的数据库配置//////////////// /** * 当使用无参数构造时,所连接的数据库类型 */ DB_TYPE, /** * 当使用无参数构造时,所连接的数据库路径(本地的文件数据库,如derby hsql sqlite等) */ DB_FILEPATH, /** * 当使用无参数构造时,所连接的数据库地址 */ DB_HOST, //数据局地址 /** * 当使用无参数构造时,所连接的数据库端口 */ DB_PORT, //数据库端口 /** * 当使用无参数构造时,所连接的数据库名称(服务名/SID) */ DB_NAME, //数据库名(服务名) /** * 当使用无参数构造时,所连接的数据库登录 */ DB_USER, //登录用户 /** * 当使用无参数构造时,所连接的数据库登录密码 */ DB_PASSWORD, //登录密码 ///////////////////其他数据库选项//////////////// /** * 当用户将Oracle的 start... with... connect by这样的语句在其他不支持此特性的数据库上运行时,允许删除这部分语句。(默认true) */ ALLOW_REMOVE_START_WITH, /** * 启用Oracle rowid支持。默认true */ DB_ENABLE_ROWID, /** * SQL语句输出格式。默认情况下面向开发期间的输出格式,会详细列出语句、参数,分行显示。 * 但在linux的命令行环境下,或者系统试运行期间,如果要用程序统计SQL日志,那么分行显示就加大了统计的难度。 * 为此可以配置为default / no_wrap,no_wrap格式下,一个SQL语句只占用一行输出。 */ DB_LOG_FORMAT, /** * 格式化SQL语句 */ DB_FORMAT_SQL, /** * 检查每个加载的Entity都必须增强,否则报错。默认true。 */ DB_FORCE_ENHANCEMENT, // /** * 数据库每次获取的大小。默认0,表示使用JDBC驱动默认的值 */ DB_FETCH_SIZE, // /** * 配置一张表名,启用数据表存放NamedQuery功能 */ DB_QUERY_TABLE_NAME, /** * 是否自动更新NamedQueries查询配置,开启此选项后,会频繁检查本地配置的(或数据库)中named-query配置是否发生变化,并加载这些变化。 * 目的是让开发时不用重启系统可以进行调试,默认和db.debug保持一致 */ DB_NAMED_QUERY_UPDATE, /** * 用于存放明明查询的资源文件名,默认名称为named-queries.xml */ NAMED_QUERY_RESOURCE_NAME, /** * 当选择t.*时,是否要将全部列名指出,默认 false,为true时全部列名显示 */ DB_SPECIFY_ALLCOLUMN_NAME, /** * 动态更新方式(更新的时候对于没有设值的字段不写入),默认true。 * 如果关闭则更新时,对除了主键以外的字段全部做更新。 */ DB_DYNAMIC_UPDATE, /** * 在使用对比等手段更新数据时,防止将null等有未赋值等嫌疑的数据更新到数据库中。 * 默认关闭 */ DB_SAFE_MERGE, /** * 动态插入方式,不设值的字段不插入(也可以以表为单位进行配置) */ DB_DYNAMIC_INSERT, // /** * 数据库启动时默认创建表 */ DB_TABLES, /** * 数据库启动时默认加载的类,用于加载一些全局配置 */ DB_INIT_STATIC, /** * true后禁止创建带remark标记的Oracle数据库连接。对于oracle而言,使用remark的连接性能很差。但要读取元数据注解必须使用此特性。<br> * 1.8.1.RELEASE以后,如果使用不使用内建连接池、或者使用内建连接池并且连接数大于3个,那么系统认为是在生产环境使用的大型应用,会自动关闭REMARK特性。 */ DB_NO_REMARK_CONNECTION, // /** * 使用外连接的方式一次性从数据库查出所有对单关联的目标值。<br/> * * * EF-ORM从1.0到1.8只支持单关联使用外连接。1.8版本以后变为可配参数,默认true。可以关闭。 */ DB_USE_OUTER_JOIN, /** * 通过记录SavePoint的方式,为Postgresql进行事务的保持。<p> * Postgresql在事务状态出现SQL执行错误,那么下一句操作必须执行commit或rollback,即不再允许执行其他SQL语句。 * 这一点和其他数据库很不一样。虽然大多数时候在SQL错误之后我们都会立即回滚事务,但是还是有不少场景需要在该事务上继续执行SQL语句的, * 为了支持这一点,能实现的办法就是在每次执行SQL前记录一个恢复点,如果执行失败则恢复到执行前的状态。如果执行成功则释放恢复点。<br> * * 这种方法虽然会稍微影响一点性能,但是却是保证跨数据库兼容性的手段。 * * 默认开启,设置成以下可以关闭。 * <code>db.keep.tx.for.postgresql=false</code> */ DB_KEEP_TX_FOR_POSTGRESQL, /** * 默认情况下,JPA事务提交时为顺序提交,一旦出错就终止提交并回滚。 * 开启此选项后,可以让各个连接相对独立。仅回滚提交出错的连接。 * 注意:此选项并不表示各个连接的事务独立。如果是程序运行时抛出异常,所有连接还是会一起回滚的。 */ DB_JPA_CONTINUE_COMMIT_IF_ERROR, /////////////数据库Sequence生成相关配置//////////////// /** * JPA实现关于自增实现分为 * <ul> * <li>Identity: 使用数据库表本身的自增特性</li> * <li>Sequence: 使用Sequence生成自增</li> * <li>Table: 使用数据库表模拟出Sequence。</li> * <li>Auto: 根据数据库自动选择 Identity > Sequence > Table <br />(由于数据库多少都支持前两个特性,所以实际上Table默认不会被使用。(分库分表下会被使用)</li> * </ul> * <p /> * * true/false。 开启此选项后,即便用户配置为Sequence或IDentity也会被认为采用Auto模式。(Table模式保留不变) * 默认false */ DB_AUTOINCREMENT_NATIVE, /** * 允许手工指定的值代替自动生成的值,默认false。 * 正常情况下,自增主键的字段是无法由用户设值的,开启此选项后,如果用户设值了自增主键的值,则将尝试将此值代替自增主键值。 * <br> * <strong> * WARN: 在MSSQL和SQLite上开启后此特性也不能使用。如果要兼容所有数据库,请勿使用此功能。 * </strong> */ DB_SUPPORT_MANUAL_GENERATE, /** * 如果自增实现<strong>实际使用</strong>了Sequence或Table作为自增策略,那么开启hilo优化模式。即sequence或table生成的值作为主键的高位,再根据当前时间等自动填充低位。 * 这样做的好处是一次操作数据库可以生成好几个值,减少了数据库操作的次数,提高了性能。 * <p> * 如果实际使用的是Identity模式(即数据库自行生成自增值),那么此项配置无效。 * <p> * true/false。默认false。仅有@HiloGeneration(always=true)的配置会使用hilo。 * 一旦设置为true,那么所有配置了@HiloGeneration()的自增键都会使用hilo. */ DB_AUTOINCREMENT_HILO, /** * 如果自增实现中<strong>实际使用</strong>了Sequence作为自增策略,那么可以使用该参数适配不同步长的sequence以优化性能。即sequence生成的值每次递增超过1,然后ORM会补齐被跳过的编号。 * 对identity,table模式无效。 * 当配置为 * <ul> * <li>0 : Oracle自动检测,其他数据库为1 (默认)</li> * <li>-1: 对所有数据库均自动检测。在非Oracle数据库上会消耗一次Sequence。</li> * <li>1 : Sequence步长固定为1.相当于该功能关闭,Sequence拿到多少就是多少。</li> * <li>>1的数值: 数据库不再自动检测,按配置值作为Sequence步长(不推荐。如果和实际Sequence步长不一致可能出错)</li> * </ul> * 默认为0,<br> * 注意:此参数不会修改数据库中已存在的Sequence的步长。也不影响由ef-orm自动创建的sequence步长。 * * 这项配置一般不需要配置,如果你不是很清楚的了解其作用,就不要配这个参数。 */ DB_SEQUENCE_STEP, /** * 如果自增实现实际使用了Sequence或Table作为自增策略,那么每次访问数据库时会取多个Sequence缓存在内存中,这里配置缓存的大小。 * 如果在TABLE模式下,会一次数据库操作直接加上批次的值,从而一次获取满缓存的Sequence * * 默认为50; */ SEQUENCE_BATCH_SIZE, /** * 开启此选项后,允许自动创建数据库SEQUENCE (或模拟用的TABLE)。 * 一般用在开发时和一些小型项目中,不适用于对用户权限有严格规范的专业项目中。 */ AUTO_SEQUENCE_CREATION, // /** * 在自动创建SEQUENCE (或模拟用的TABLE)时,Sequence的初始值。 * * 默认-1,表示根据表中现存的记录自动校准(最大值+1)。 * 当配置为正数时,为每张表的初始值+配置值。 */ AUTO_SEQUENCE_OFFSET, /** * Sequence名称模板<br> * 可以被@SequenceGenerator当中的Sequence名称所覆盖。<br> * 当需要使用Sequence的时候就会被使用。 * * 默认值s_%s S_表名 */ SEQUENCE_NAME_PATTERN, /** * 配置一个表名作为公共的SequenceTable名称 * String * * 默认空白 */ DB_GLOBAL_SEQUENCE_TABLE, ////////////////////其他数据库相关设置//////////////////////// /** * 启用一级缓存,默认false */ CACHE_LEVEL_1, /** * 默认为0。当为0时,表示不启用二级缓存。 * 如果设置为>0的数值表示启用二级缓存,每条缓存记录的最大生存时间等于指定的秒数。 */ CACHE_GLOBAL_EXPIRE_TIME, /** * 允许为空的查询条件,默认false */ ALLOW_EMPTY_QUERY, /** * 配置一个类名,这个类需要实现jef.database.support.DbOperatorListener接口。监听器可以监听数据库的各项基本操作。 */ DB_OPERATOR_LISTENER, /** * 配置为true,则对数据库密码做解密处理 */ DB_PASSWORD_ENCRYPTED, //true/false描述数据库密码是否加密 /** * 密码加密的密钥 */ DB_ENCRYPTION_KEY, /** * 扫描分表间隔时间(单位秒),默认3600秒,即一小时。 * JEF扫描基于基础表的所有存在分表。这一结果会被缓存,但是考虑到生产环境中会动态的建表,因此缓存可以设置有效期 */ DB_PARTITION_REFRESH, /** * ORM初始化后是否显示JDBC和数据库的版本信息,true/false。默认true */ DB_SHOW_JDBC_VERSION, /** * 延迟加载特性,默认启用(true)。关闭后可禁用延迟加载。这项配置对所有的级联操作生效 */ DB_ENABLE_LAZY_LOAD, /** * 延迟加载LOB特性,默认关闭(false)。关闭后可禁用延迟加载LOB。这项配置对对象中的BLOB和CLOB字段生效 * FIXME 待完善 * @deprecated 现尚不稳定,请勿使用 */ DB_LOB_LAZY_LOAD, /** * 用来定义数据库和方言类的映射关系的配置文件。 * 默认使用 META-INF/dialect-mapping.properties */ DB_DIALECT_CONFIG, /** * 检查SQL语句中的function,默认true,设置为false后,ORM不再检查函数是否可用。 */ DB_CHECK_SQL_FUNCTIONS, /** * 当分表维度缺失时,默认时间宽度。是一个表达式,例如 -3,1表示从当天算起时间维度为向前三个月到向后一个月 * 分库分表场景下,如果使用时间作为分表维度,而查询数据而又未指定明确的时间时,将只查询该时段范围内的数据。 * */ PARTITION_DATE_SPAN, /** * 当需要查询的数据库数量大于等于指定值时,启用多线程并行查询。(默认值3,即3个数据库或以上启用并行查询) */ PARTITION_PARALLEL, /** * 当分库操作时,不得不进行内存排序和聚合计算时,该参数用于限制最大操作的行数,防止内存溢出。<br> * 一旦达到最大行数,该次操作将抛出异常。 * 默认0,表示不限制。 */ PARTITION_INMEMORY_MAXROWS, /** * 按需建表功能开关,默认开。开启按需建表功能后,在分库分表下执行插入操作时,会自动创建需要的表。 */ PARTITION_CREATE_TABLE_INNEED, /** * 在分库分表下执行查询、删除、更新操作时过滤掉哪些数据库中不存在的表。默认开启。 */ PARTITION_FILTER_ABSENT_TABLES, /** * 当使用HashMod1024Mapping对字段进行分表分库处理时的计算规则。 * 配置方法为 * {@code 0-255:DB1,256-767:DB2,768-1023:DB3} * 表示当对字符串取hash后,除以1024的余数为0~255范围时 * */ PARTITION_BUCKET_RANGE, /** * 在一次in条件中允许出现的最多参数数量。缺省500。有部分批量查询接口,可以自动将传入的条件转为 in (?,?,?,..)这样的语句,该参数可用于控制in条件最大的元素个数。 */ DB_MAX_IN_CONDITIONS; }