当前位置: 首页 > news >正文

SpringBoot中从HikariCP迁移到Oracle UCP指南

本博客文章的目标是作为从 HikariCP 和Oracle UCP(通用连接池)迁移的指南,因为它是连接到Oracle 数据库时的推荐方法。

HikariCP 简介
HikariCP是与 Spring Boot 应用程序一起使用的 JDBC 连接池。

简而言之,从 Java 开发人员的角度来看,要在 Spring Boot 应用程序中使用 HikariCP 作为连接池,在使用 JDBC 连接池时通常需要执行一些步骤。

如果您使用 Spring Initializr,那么有趣的是,spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa 默认情况下以及在使用这些启动器时包含对 HikariCP 的依赖项。因此,如果您想使用 UCP,建议排除对 HikariCP 的依赖。

如果您需要 HikariCP 的介绍,我建议您查看我同事的博客文章 — HikariCP Best Practices for Oracle Database and Spring Boot,其中介绍了 HikariCP 并使用 Oracle JDBC 版本 19.21(ojdbc8 依赖项)。

本博客文章使用 Oracle JDBC 版本 23.3(ojdbc11 依赖项)。

Oracle UCP 简介
Oracle通用连接池(UCP)是Oracle设计的一个基于Java JDBC的高性能连接池,旨在提高数据库访问的效率和性能。

UCP JDBC 连接池可以使用任何 JDBC 驱动程序来创建物理连接,然后由池维护这些连接。可以配置池并提供一整套属性,用于根据应用程序的性能和可用性要求优化池行为。对于更高级的应用程序,UCP 提供了可用于管理池实例的池管理器。

该池还利用 Oracle Real Application Clusters (Oracle RAC) 数据库提供的许​​多高可用性和性能特性。这些功能包括快速连接故障转移 (FCF)、运行时连接负载平衡 (RLB)、连接亲和性、分片和 Oracle 云基础设施数据库服务(自治数据库、BaseDB)。

下面我们有一个示例 application.properties 文件,其中包含最小的 UCP 属性集作为示例。我们将在剩余部分中详细探讨一些其他属性。

# OCI ORACLE 自治数据库连接
spring.datasource.url =<YOUR_JDBC_CONNECTION_URL> 
spring.datasource.username =<YOUR_DB_USERNAME> 
spring.datasource.password =<YOUR_DB_PASSWORD>

# UCP 的属性 - 通用连接池 (UCP)。需要 Spring Boot 2.4.0 或更高版本
spring.datasource.type =oracle.ucp.jdbc.PoolDataSource 
spring.datasource.oracleucp.connection-pool-name =connectionPoolName1 
spring.datasource.oracleucp.initial-pool-size = 1 
spring. datasource.oracleucp.min-pool-size = 1 
spring.datasource.oracleucp.max-pool-size = 2 
spring.datasource.oracleucp.connection-factory-class-name =oracle.jdbc.pool.OracleDataSource

从 HikariCP 迁移到 Oracle UCP
现在让我们看看如何从 HikariCP 迁移到 UCP。
以下步骤介绍如何正确配置并允许来自使用[Oracle UCP(Oracle 连接池)](https://docs.oracle.com/en/database/oracle/oracle-database/23/jjucp/index.htmlOracle%C2%AE)作为 HikariCP(Spring Boot 中的默认连接池实现)替代方案的 Spring Boot 应用程序的连接。

首先,要将 UCP 添加为 Maven 依赖项,您可以显式添加 ojdbc11 和 ucp11 工件。


          com.oracle.database.jdbc
          ojdbc11
          23.3.0.23.09
       
       
          com.oracle.database.jdbc
          ucp11
          23.3.0.23.09
       

否则,您可以使用适用于 UCP 的 Oracle Spring Boot Starters。

    com.oracle.database.spring     oracle-spring-boot-starter-ucp     23.4.0

此外,为了完整起见,我们还总结并映射了 HikariCP 和 UCP 下面的相关属性,通过 MBean 映射了池属性和度量。

因此,连接池属性有三个部分:

与 UCP 完全等价的 HikariCP 属性

dataSourceClassName:    ConnectionFactoryClassName    (1) ConnectionFactoryClassName also covers java.sql.DriverManager cases.(2) HikariCP doesn’t support XA.
jdbcUrl:    URL    
username :   User    
password :   Password    
connectionTimeout (ms):    ConnectionWaitTimeout    UCP 23.2 supports ms and pre-23.2 supports sec. HikariCP lowest acceptable value 250ms.
idleTimeout:    InactiveConnectionTimeout    HikariCP won’t drop below minimumIdle.
maxLifeTime :   MaxConnectionReuseTime    
connectionTestQuery :   SQLForValidateConnection    
maximumPoolSize :   MaxPoolSize    
poolName :   ConnectionPoolName    
driverClassName:    ConnectionFactoryClassName    Not recommended. See dataSourceClassName.
validationTimeout:    ConnectionValidationTimeout

HikariCP 属性没有相同的 UCP 属性可匹配,但有其他机制,如驱动程序属性或 UCP API

autoCommit    使用 Oracle JDBC 驱动程序连接属性 autoCommit。
registerMbeans    UCP 始终尝试注册。
threadFactory    UCP 支持 setTaskManager(仅 setter API)。
scheduledExecutor    UCP supports setTaskManager instead (setter API only).
keepaliveTime    最接近的方法是使用驱动程序连接属性 oracle.net.keepAlive + oracle.net.TCP_KEEPIDLE,它们适用于所有借用/可用连接。HikariCP 属性只适用于空闲/可用连接,并使用 isValid/query 来保持存活。另一种方法是在 UCP 中为可用连接添加异步验证。
minimumIdle    控制 HikariCP 试图在池中保持的空闲连接的最小数量。

HikariCP 中不存在的UCP旋钮:

如果您使用 Oracle 通用连接池,您可以拥有这些属性。HikariCP 中没有这些属性。

UCP Knob    Description
UCP[XA]ConnectionBuilder.user().password() or PoolDataSource.getConnection(user + password)    UCP 的单个池可容纳多个数据库账户的连接,并可借用某个账户的连接。
UCP[XA]ConnectionBuilder.shardingKey().superShardingKey()    可以使用给定的分片密钥/超级密钥建立连接。
UCP[XA]ConnectionBuilder.connectionWaitTimeout() or UCP[XA]ConnectionBuilder.connectionWaitDuration()    UCP 可以为单独的借用请求和整个 PoolDataSource 设置连接等待超时(以秒为单位或以 Duration(支持毫秒)为单位)。
UCP[XA]ConnectionBuilder.service()    可以借用连接到选定的数据库服务(池可容纳来自不同服务的连接)。
UCP[XA]ConnectionBuilder…labels() or PoolDataSource.getConnection(labels)    可以对 UCP 连接进行标记,并为每个标记分配连接成本。然后就可以根据标签和成本借用连接。
UCP[XA]ConnectionBuilder.pdbRoles()    UCP 支持 Oracle 多租户与多个 PDB 及其角色。
java.sql.Connection UCP[XA]ConnectionBuilder.build() or PoolDataSource.getConnection()    UCP 可通过上述所有按次借用请求属性同步借用连接。
CompletionStage UCP[XA]ConnectionBuilder.buildAsyncOracle()    另外,UCP 也可以异步借用连接,返回一个完成阶段。
Publisher UCP[XA]ConnectionBuilder.buildConnectionPublisherOracle()    或者,UCP cab 也可以通过 Flow API 异步借用连接,返回一个 Flow.Publisher.Publisher.Publisher.Publisher.Publisher.Publisher.Publisher.Publisher 连接。
PooldataSource and PooXADataSource    UCP 池数据源支持常规和分布式事务
Pool[XA]DataSource.inactiveConnectionTimeout/maxIdleTime    设置关闭非活动可用连接的超时。
Pool[XA]DataSource.abandonedConnectionTimeout    设置将非活动借用连接(借用但未使用)召回连接池的超时。
Pool[XA]DataSource.timeToLiveConnectionTimeout    Si与 abandonedConnectionTimeout 类似,但它需要借用连接的整个时间。
Pool[XA]DataSource.connectionWaitDuration/connectionWaitTimeout    借用连接的等待时间–以秒或持续时间为单位(包括毫秒)。
Pool[XA]DataSource.fastConnectionjFailoverEnabled    要启用或禁用基于 RAC 的故障切换/运行时负载平衡/连接亲和。
Pool[XA]DataSource.maxStatements    为连接设置最大语句,以便打开或关闭 LRU 语句缓存
Pool[XA]DataSource.validateConnectionOnBorrow Pool[XA]DataSource.secondsToTrustIdleConnection Pool[XA]DataSource.sqlForValidateConnection Pool[XA]DataSource.connectionValidationTimeout    连接验证的不同模式(验证模式可在驱动程序中切换);为硬验证模式设置 SQL 语句;设置验证超时;以及设置不对每次借用请求进行连接验证但在指定时间内信任连接有效的模式。
Pool[XA]DataSource.sqlForValidateConnection    Setting SQL for validating a connection
Pool[XA]DataSource.connectionHarvestTriggerCount Pool[XA]DataSource.connectionHarvestMaxCount    Knobs for configuring connection harvesting mechanism - allowing a pool to recall connections back to a pool based on a specified algorithm (for details refer to the UCP Developer’s Guide)
Pool[XA]DataSource.connectionLabelingCallback Pool[XA]DataSource.connectionLabelingHighCost Pool[XA]DataSource.HighCostConnectionReuseThreshold    用于配置连接标签机制的旋钮 - 用于设置标签 → 成本对应关系,以便根据成本重新配置连接。
Pool[XA]DataSource.connectionAffinityCallback    旋钮用于配置基于 RAC 的连接亲和性(基于事务的亲和性或基于实例的亲和性)
Pool[XA]DataSource.connectionProperty/connectionProperties    设置连接属性 - 用于 Oracle 驱动程序。
Pool[XA]DataSource.connectionFactoryProperty/connectionFactoryProperties    设置连接工厂属性–与前者类似,但工厂会为将来要创建的每个连接分配这些属性。
Pool[XA]DataSource.maxConnectionReuseTime/maxConnectionReuseCount    根据连接的使用时间或使用次数(借用次数)设置连接生命周期的属性(对防火墙有用)。
Pool[XA]DataSource.connectionInitializationCallback    在连接初始化时调用自定义回调。
Pool[XA]DataSource.connectionCreationConsumer    以调用连接创建时的自定义回调,该回调会在连接创建尝试成功或失败时触发。
Pool[XA]DataSource.connectionRepurposeThreshhold    限制连接再利用的旋钮,只有在达到某个阈值时才允许连接再利用(从一个多租户 PDB 到另一个多租户 PDB)。
Pool[XA]DataSource.maxConnectionsPerService Pool[XA]DataSource…maxConnectionsPerShard   此旋钮限制每个服务的连接数。
Pool[XA]DataSource.sslContext    This knob restricts a number of connection per a shard.
PoolDataSourceFactory.getPool[XA]DataSource(String dataSourceName + InputStream is) PoolDataSourceFactory.getPool[XA]DataSource(Properties config)    该调用允许读取带有多个 PDB 的多租户配置。
UniversalConnectionPoolManager.createConnectionPool UniversalConnectionPoolManager.destroyConnectionPool    池管理器的旋钮,用于创建和销毁具有指定名称的池。
UniversalConnectionPoolManager.startConnection UniversalConnectionPoolManager.stopConnectionPool    池管理器的旋钮,用于启动和停止具有指定名称的池。
UniversalConnectionPoolManager.refreshConnectionPool    Pool Manager’s knob to refresh (replace all available connections with fresh ones) a pool with a given name.
UniversalConnectionPoolManager.recycleConnectionPool    Pool Manager’s knob to recycle (replace all invalid available connections with fresh ones) a pool with a given name.
UniversalConnectionPoolManager.purgeConnectionPool    Pool Manager’s knob to purge (close all connections) a pool with a given name.
UniversalConnectionPoolManager.reconfigureConnectionPool    Read a new pool’s configuration and restart a pool with it - for a pool with a given names.
UniversalConnectionPoolManager.getConnectionPoolNames    Get all names of pools that have been created at this point.
UniversalConnectionPoolManager.startMetricsCollection UniversalConnectionPoolManager.stopMetericsCollection UniversalConnectionPoolManager.metricsUpdateInterval    Start/stop/set collect interval for collecting pool metrics with Oracle DMS system.
OracleJDBCConnectionPoolStatistics.successfulAffinityBasedBorrowCount OracleJDBCConnectionPoolStatistics.failedAffinityBasedBorrowCount    Affinity based counters.
OracleJDBCConnectionPoolStatistics.successfulRCLBBasedBorrowCount OracleJDBCConnectionPoolStatistics.failedRCLBBasedBorrowCount    Runtime Load Balanicng counters.
OracleJDBCConnectionPoolStatistics.fcfProcessingInfo    Some Fast Connection Failover statistics summary (Failover events and appropriate conunters and timestamps).
OracleJDBCConnectionPoolStatistics.connectionRepurposeCount    Fo how many times connections have been repurposed from one multi-tenant PDB to another.
OracleJDBCConnectionPoolStatistics.colocationStats    Some colocation tag-based (RAC mechanism) stats.
OracleJDBCConnectionPoolStatistics.totalConnectionsCount OracleJDBCConnectionPoolStatistics.availableConnectionsCount OracleJDBCConnectionPoolStatistics…borrowedConnectionsCount    Some very basic pool counters - how many total/available/borrowed connections in a pool.
OracleJDBCConnectionPoolStatistics.peakConnectionsCount OracleJDBCConnectionPoolStatistics.peakBorrowedConnectionsCount    Some peak connection counters.
OracleJDBCConnectionPoolStatistics.averageBorrowedConnectionsCount    Some average borrowed counts since startup.
OracleJDBCConnectionPoolStatistics.remainingPoolCapacityCount    What is remaining pool’s capacity - how many connections is it possible to create.
OracleJDBCConnectionPoolStatistics.labeledConnectionsCount    How many labeled connections in a pool.
OracleJDBCConnectionPoolStatistics.connectionsCreatedCount OracleJDBCConnectionPoolStatistics.connectionsClosedCount    Counters for created and closed connections.
OracleJDBCConnectionPoolStatistics.averageConnectionWaitTime OracleJDBCConnectionPoolStatistics.peakConnectionWaitTime    Avaerage and peak times for a connections waiting to be borrowed.
OracleJDBCConnectionPoolStatistics.abandonedConnectionsCount    Counter for abandoned connections.
OracleJDBCConnectionPoolStatistics.pendingRequestsCount    Number of pending borrow requests at the current moment.
OracleJDBCConnectionPoolStatistics.cumulativeConnectionWaitTime OracleJDBCConnectionPoolStatistics.cumulativeConnectionBorrowedCount OracleJDBCConnectionPoolStatistics.cumulativeConnectionUseTime OracleJDBCConnectionPoolStatistics.cumulativeConnectionReturnedCount OracleJDBCConnectionPoolStatistics.cumulativeSuccessfulConnectionWaitTime OracleJDBCConnectionPoolStatistics.cumulativeSuccessfulConnectionWaitCount OracleJDBCConnectionPoolStatistics.cumulativeFailedConnectionWaitTime OracleJDBCConnectionPoolStatistics.cumulativeFailedConnectionWaitCount OracleJDBCConnectionPoolStatistics.cumulativeConnectionCreationAttemts OracleJDBCConnectionPoolStatistics.connectionCreationAttemptsSinceLastOutage    Various cumulative stats.
OracleJDBCConnectionPoolStatistics.shardConnectionStats

笔记:

  1. oracle.ucp.jdbc.UCP[XA]ConnectionBuilder — 这是 PoolDataSource.getConnection() 的替代方案,但允许为具体连接借用请求提供更多数据。它是使用 PoolDataSource.createConnectionBuilder() 创建的,可以根据需要从一个池数据源创建任意多个构建器,并且可以仅为一个借用请求或多个借用请求创建。
  2. oracle.ucp.jdbc.Pool[XA]DataSource — 标准池数据源。
  3. oracle.ucp.jdbc.PoolDataSourceFactory — 用于创建池数据源的工厂,包括读取 XML 或复杂多租户配置属性的方法。
  4. oracle.ucp.admin.UniversalConnectionPoolManager — UCP 管理器,可以处理一个 Java 应用程序中的多个池。
  5. oracle.ucp.jdbc.oracle.OracleJDBCConnectionPoolStatistics — 保存通用连接池统计信息快照的对象。

池指标映射

HikariCP metrics    UCP Metrics
Number of active connections    BorrowedConnectionsCount
Number of pending connection requests    PendingRequestsCount
Total number of timed-out requests    CumulativeFailedConnectionWaitCount
Time taken to get a connection    PeakConnectionWaitTime / AverageConnectionWaitTime
Current total number of connections    TotalConnectionsCount
Number of idle connections    AvailableConnectionsCount
Max number of connections    PeakConnectionsCount

我们通过定义以下属性来选择使用Oracle UCP(通用连接池)作为本机 Spring 数据源。请注意,此类属性需要高于 2.4.0 的 Spring Boot 版本。

spring.datasource.type=oracle.ucp.jdbc.PoolDataSource
spring.datasource.oracleucp.connection-pool-name=connectionPoolName1
spring.datasource.oracleucp.initial-pool-size=1
spring.datasource.oracleucp.min-pool-size=1
spring.datasource.oracleucp.max-pool-size=2
spring.datasource.oracleucp.connection-factory-class-name=oracle.jdbc.pool.OracleDataSource

我们还必须配置连接 URL、用户名和密码。

spring.datasource.url=<YOUR_JDBC_CONNECTION_URL>
spring.datasource.username=<YOUR_DB_USERNAME>
spring.datasource.password=<YOUR_DB_PASSWORD>

关于具体的UCP连接池设置,Spring Boot使用以下算法来选择具体的实现:
根据文档,HikariCP因其性能和并发性而成为首选。如果HikariCP可用,算法会选择它。

  • · 否则,如果Tomcat JDBC 连接池可用,则会选择它。
  • · 否则,如果Apache Commons DBCP2可用,则会选择它。
  • · 如果HikariCP、Tomcat 和DBCP2都不可用,而Oracle UCP可用,则选择它。

您可以完全绕过该算法并通过设置spring.datasource.type属性来指定要使用的连接池。这正是我们将在从 HikariCP 迁移到 Oracle 通用连接池 (UCP) 时执行的操作。

为此,我们将配置该属性,如下所示。这是从 HikariCP 切换到 Oracle UCP 的关键配置:
spring.datasource.type=oracle.ucp.jdbc.PoolDataSource

鉴于 UCP 提供了许多功能,这些功能将通过其坚如磐石的实现支持带来更好的性能,现在我们列出了可用于在 Spring Boot 中配置 UCP 的所有属性。
我们拥有所有属性的完整列表,您可以使用它来了解 UCP 的灵活性和强大性。
您可以使用示例application.properties文件,其中包含具有最常见 UCP 属性的基本配置。

我不会复制列出的这些 UCP 相关属性的文档。oracle.ucp.jdbc.PoolDataSource解释了这些属性,因此请检查Javadoc。
因此,列出绑定到 Oracle UCP PoolDataSource 实例的 Oracle UCP 特定设置只是为了您的方便,因为上面的 Javadoc 对它们有单独的解释。
PoolDataSource 在内部使用通用连接池,因此它的 setter 方法具有 UCP 池属性及其默认值。

spring.datasource.url
spring.datasource.username
spring.datasource.password
spring.datasource.driver-class-name
spring.datasource.type
spring.datasource.oracleucp.abandoned-connection-timeout
spring.datasource.oracleucp.connection-factory-class-name
spring.datasource.oracleucp.connection-factory-properties
spring.datasource.oracleucp.connection-harvest-max-count
spring.datasource.oracleucp.connection-harvest-trigger-count
spring.datasource.oracleucp.connection-labeling-high-cost
spring.datasource.oracleucp.connection-pool-name
spring.datasource.oracleucp.connection-properties
spring.datasource.oracleucp.connection-repurpose-threshold
spring.datasource.oracleucp.connection-validation-timeout
spring.datasource.oracleucp.connection-wait-timeout
spring.datasource.oracleucp.data-source-name
spring.datasource.oracleucp.database-name
spring.datasource.oracleucp.description
spring.datasource.oracleucp.fast-connection-failover-enabled
spring.datasource.oracleucp.high-cost-connection-reuse-threshold
spring.datasource.oracleucp.inactive-connection-timeout
spring.datasource.oracleucp.initial-pool-size
spring.datasource.oracleucp.login-timeout
spring.datasource.oracleucp.max-connection-reuse-count
spring.datasource.oracleucp.max-connection-reuse-time
spring.datasource.oracleucp.max-connections-per-shard
spring.datasource.oracleucp.max-idle-time
spring.datasource.oracleucp.max-pool-size
spring.datasource.oracleucp.max-statements
spring.datasource.oracleucp.min-pool-size
spring.datasource.oracleucp.network-protocol
spring.datasource.oracleucp.o-n-s-configuration
spring.datasource.oracleucp.pdb-roles
spring.datasource.oracleucp.port-number
spring.datasource.oracleucp.property-cycle
spring.datasource.oracleucp.query-timeout
spring.datasource.oracleucp.read-only-instance-allowed
spring.datasource.oracleucp.role-name
spring.datasource.oracleucp.s-q-l-for-validate-connection
spring.datasource.oracleucp.seconds-to-trust-idle-connection
spring.datasource.oracleucp.server-name
spring.datasource.oracleucp.sharding-mode
spring.datasource.oracleucp.time-to-live-connection-timeout
spring.datasource.oracleucp.timeout-check-interval
spring.datasource.oracleucp.u-r-l
spring.datasource.oracleucp.user
spring.datasource.oracleucp.validate-connection-on-borrow

关于 Spring Boot 3.2.0,以下链接包含记录的所有通用应用程序属性。

  • https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
  • appendix.application-properties.data>https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.htmlappendix.application-properties.data
  • documentation.data>https://docs.spring.io/spring-boot/docs/3.2.0/reference/html/documentation.htmldocumentation.data
  • data.sql>https://docs.spring.io/spring-boot/docs/3.2.0/reference/html/data.htmldata.sql

总结
Oracle通用连接池(UCP)是Oracle设计的一个基于Java JDBC的高性能连接池,旨在提高数据库访问的效率和性能。

UCP 提供了用于缓存 JDBC 连接的连接池实现。数据库密集型Java应用程序使用连接池来提高性能并更好地利用系统资源。UCP JDBC 连接池可以使用任何JDBC 驱动程序来创建物理连接,这令人惊讶,因为它不仅特定于 Oracle DB。

从从 HikariCP 迁移到 Oracle UCP 的角度来看,这篇博文介绍了 Oracle UCP 中可用的完整属性集,用于支持 Java 连接池的迁移和优化。

参考

  • Oracle UCP(通用连接池)
  • 适用于 UCP 的 Oracle Spring Boot 启动器
  • Oracle Spring Boot 入门 — GitHub
  • 将 Spring 和 Spring Boot 与 Oracle 数据库结合使用
  • Spring Boot——常见应用程序属性
  • HikariCP — GitHub
  • HikariCP Oracle 数据库和 Spring Boot 最佳实践
  • Maven Central 上的 Oracle JDBC 开发人员指南
  • 使用 Oracle 数据库开发 Java 应用程序

https://www.jdon.com/72055.html

相关文章:

SpringBoot中从HikariCP迁移到Oracle UCP指南

本博客文章的目标是作为从 HikariCP 和Oracle UCP&#xff08;通用连接池&#xff09;迁移的指南&#xff0c;因为它是连接到Oracle 数据库时的推荐方法。 HikariCP 简介 HikariCP是与 Spring Boot 应用程序一起使用的 JDBC 连接池。 简而言之&#xff0c;从 Java 开发人员的…...

第3章 接口和API设计

第15条&#xff1a;用前缀避免命名空间冲突 OC没有其他语言那种内置的命名空间机制。因此&#xff0c;我们在起名时要设法避免潜在的命名冲突&#xff0c;否则很容易就重名了。若是发生重名冲突&#xff0c;那么应用程序相应的链接过程就会出错。例如&#xff1a; 错误原因在…...

HBase入门:实现原理

文章目录 说明HBase的实现原理HBase功能组件表和 RegionRegion 的定位 说明 本文参考自林子雨老师的《大数据技术原理与应用(第三版)》教材内容&#xff0c;仅供学习和交流 HBase的实现原理 HBase功能组件 HBase 的实现包括 3 个主要的功能组件&#xff1a;库函数&#xff…...

Redis入门到实战-基础篇+实战篇+高级篇+原理篇

Redis入门到实战-基础篇实战篇高级篇原理篇 文章目录 Redis入门到实战-基础篇实战篇高级篇原理篇一、基础篇二、实战篇三、高级篇四、原理篇 一、基础篇 1.基础篇笔记&#xff1a;https://blog.csdn.net/cygqtt/article/details/126974142 二、实战篇 1.实战篇笔记&#xff1a;…...

redis 工具类

在Spring Boot项目中&#xff0c;Redis是一个常用的分布式缓存解决方案。下面展示的RedisCache工具类封装了对Redis进行基本操作的方法&#xff0c;包括存储和获取各种类型的数据、设置过期时间以及处理集合类型的缓存。 /*** redis 工具类***/ SuppressWarnings(value { &q…...

焕新升级,不同以“网” | AnyCase客户端全新上线

升级啦~ 2024年1月23日 箱讯AnyCase官网全新改版上线&#xff01; 全球贸易All in One集成平台 集物流服务、外贸服务、供应链金融服务、企业风控服务、碳中和服务于一体 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 优化首页布局→体验升级 此次…...

导出 MySQL 数据库表结构、数据字典word设计文档

一、第一种 &#xff1a;利用sql语句查询 需要说明的是该方法应该适用很多工具&#xff0c;博主用的是navicat SELECT TABLE_NAME 表名,( i : i 1 ) AS 序号,COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE…...

conda管理python安装包与虚拟环境的相关命令汇总

conda的简单介绍 Anaconda&#xff0c;是一个开源的Python发行版本&#xff0c;包含了conda、Python以及一大堆安装好的工具包及依赖项。 conda是Anaconda中的一个开源的、Python包和环境的管理工具&#xff0c;包含于Anaconda的所有版本当中。因此使用conda需要先安装Anacon…...

Vue3引用echart5 报错解决

一、TypeError: Cannot read properties of undefined (reading type) 原因&#xff1a;由于把echart实例绑定到了一个响应式的变量上 解决方案 【1】使用markRaw 把响应式变量定为非响应式变量 import { markRaw } from vue; export default {data() {return {chartConta…...

浅析HTTP协议

首先&#xff0c;前端请求后端数据&#xff0c;后端响应数据给前端&#xff0c;这是我们大家都知道的&#xff0c;那其中所涉及到的数据传输协议又是什么呢&#xff1f;这个传输规范就是我们大名鼎鼎的HTTP协议&#xff01; 什么是HTTP协议&#xff1f; HTTP&#xff08;超文本…...

etcd未授权到控制k8s集群

在安装完 K8s 后&#xff0c;默认会安装 etcd 组件&#xff0c;etcd 是一个高可用的 key-value 数据库&#xff0c;它为 k8s 集群提供底层数据存储&#xff0c;保存了整个集群的状态。大多数情形下&#xff0c;数据库中的内容没有加密&#xff0c;因此如果黑客拿下 etcd&#x…...

制作一个简单的HTML个人网站

在当今数字化的世界里&#xff0c;拥有一个个人网站已经成为了展示个人品牌、分享作品和信息的必备工具。虽然有各种复杂的内容管理系统&#xff08;CMS&#xff09;和平台可以帮助我们快速搭建个人网站&#xff0c;但对于初学者或者想要了解更多技术细节的人来说&#xff0c;从…...

头歌C语言字符数组

目录 第1关:字符逆序 任务描述 相关知识(略) 编程要求 测试说明 第2关:字符统计 任务描述 相关知识(略) 编程要求 测试说明 第3关:字符插入 任务描述 相关知识(略) 编程要求 测试说明 第4关:字符串处理 任务描述 相关知识(略)...

【mongoDB】文档 CRUD

目录 1.插入文档 批量插入&#xff1a; 2.查询文档 3.更新文档 4.删除文档 deleteOne() deleteMany() findOneAndDelete() 1.插入文档 可以使用 insert () 方法或者 save() 方法向集合中插入文档 语法如下&#xff1a; db.collection_name.insert(document) collectio…...

每日一题——LeetCode1337.矩阵中战斗力最弱的K行

方法一 个人方法 排序 题目要求就是找出每行有多少个1&#xff0c;根据每行1的个数进行排序&#xff0c;但是是把每行在数组中的位置索引进行排序&#xff0c;并返回前k项 所以先统计每行1的个数&#xff0c;并将数组转化为[index,count]就是索引加个数的数组形式&#xff0c…...

docker指令存档

目录 Docker 1、概念 2、架构图 3、安装 4、Docker怎么工作的&#xff1f; 5、Docker常用命令 帮助命令 镜像命令 1、查看镜像 2、帮助命令 3、搜索镜像 4、拉取镜像 5、删除镜像 容器命令 1、启动 2、查看运行的容器 3、删除容器 4、启动&停止 其他命令…...

Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据

Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据 引言正文 引言 之前在 《pandas向已经拥有数据的Excel文件中添加新数据》 一文中我们介绍了如何通过 pandas 向 Excel 文件中写入数据。那么对于含有多表头的数据&#xff0c;我们该如何将它们…...

ChatGPT 和文心一言 | 两大AI助手哪个更胜一筹

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff…...

flink学习之窗口处理函数

窗口处理函数 什么是窗口处理函数 Flink 本身提供了多层 API&#xff0c;DataStream API 只是中间的一环&#xff0c;在更底层&#xff0c;我们可以不定义任何具体的算子&#xff08;比如 map()&#xff0c;filter()&#xff0c;或者 window()&#xff09;&#xff0c;而只是…...

Python 基于pytorch从头写GPT模型;实现gpt实战

1.GPT简介 GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型是一种基于Transformer架构的生成式预训练模型&#xff0c;由OpenAI开发。它采用了无监督学习的方式进行预训练&#xff0c;然后通过微调适应特定的任务。GPT模型的结构由多层Transformer解码器组…...

2023年NOC大赛(学而思赛道)创意编程Python初中组决赛真题

2023年NOC大赛&#xff08;学而思赛道&#xff09;创意编程Python初中组决赛真题 题目总数&#xff1a;7 总分数&#xff1a;100 编程题 第 1 题 问答题 二进制回文 编程实现: 输入一个正整数&#xff0c;判断它的二进制形式是否是回文数&#xff0c;如果是输出True…...

头歌C++之Switch控制语句编程实训

目录 第1关:根据输入数字判断是星期几 本关必读 本关任务 测试说明 第2关:根据输入的数值和运算符做相应运算 本关必读 本关任务 测试说明 第3关:根据输入年月计算该月份的天数 本关必读 本关任务...

CNN卷积理解

1 卷积的步骤 1 过滤器&#xff08;卷积核&#xff09;&#xff08;Filter或Kernel&#xff09;&#xff1a; 卷积层使用一组可学习的过滤器来扫描输入数据&#xff08;通常是图像&#xff09;。每个过滤器都是一个小的窗口&#xff0c;包含一些权重&#xff0c;这些权重通过训…...

DataKit迁移MySQL到openGauss

前言 本文将分享DataKit迁移MySQL到openGauss的项目实战&#xff0c;供广大openGauss爱好者参考。 1. 下载操作系统 https://www.openeuler.org/zh/download https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/1a643956 https://support.huawei.com/enterprise…...

Dockerfile里ADD * 保留原来的目录结构

1、问题 给新模块写Dockerfile&#xff0c;很多静态资源分散在各个目录&#xff0c;于是Dockerfile里我直接一句&#xff1a; ADD ./* /dest/镜像出来后&#xff0c;启动容器&#xff0c;进入容器种后发现&#xff1a;文件拷贝成功&#xff0c;但原来的目录结构都不在了&…...

C++ 利用容器适配器,仿函数实现栈,队列,优先级队列(堆),反向迭代器,deque的介绍与底层

C 利用容器适配器,仿函数实现栈,队列,优先级队列【堆】,反向迭代器,deque的介绍与底层 一.容器适配器的介绍二.利用容器适配器实现栈和队列1.stack2.queue 三.仿函数介绍1.什么是仿函数2.仿函数的使用3.函数指针的使用1.函数指针的用处2.利用函数指针完成回调3.利用仿函数完成回…...

C语言实战系列二:简单超市收银系统

从一个简单的超市收银系统&#xff0c;我们来练习一个系统如何设计&#xff0c;然后如何实现的思路。 在Ubuntu环境下使用C语言编写一个简单的超市收银系统。以下是一个基本的示例&#xff0c;涵盖了商品管理、购物车、交易处理等功能。 代码 #include <stdio.h> #inc…...

coding推送代码Jenkins自动构建部署

实现功能&#xff1a;我们向coding推送代码&#xff0c;通过webhook自动通知Jenkins&#xff0c;实现自动构建部署 coding 项目设置 / 开发者选项 / Service Hook 输入以下参数 发送POST请求服务 URL&#xff1a;htttp://xxx用户名&#xff1a;xxx密码&#xff1a;xxx Jen…...

Kettle-Docker部署+Sqlserver数据同步Mysql+Start定时任务

一. 背景介绍 1. ETL是什么 ETL&#xff08;Extract-Transform-Load&#xff09;&#xff0c;即数据抽取、转换、装载的过程。它是一种思想&#xff0c;主要是说&#xff0c;从不同的数据源获取数据&#xff0c;并通过对数据进行处理&#xff08;格式&#xff0c;协议等转换&a…...

《微信小程序开发从入门到实战》学习九十三

7.1 视图容器组件 7.1.3 swiper与swiper-item组件 swiper组件的显示效果如下图所示&#xff1a; indicator-dots、indicator-color和indicator-active-color三个属性用于设置swiper组件下方的指示点。设置指示点的颜色时&#xff0c;可以使用HexColor&#xff0c;也可以使用r…...

微投票网站/seo关键词排名教程

点击上方蓝字&#xff0c;关注并星标&#xff0c;和我一起学技术。大家好&#xff0c;欢迎来到freecodecamp HTML专题第7篇。首先声明&#xff0c;我们的文章跳过了一篇&#xff0c;也就是freecodecamp这个网站上第7个挑战&#xff1a;Basic HTML and HTML5: Delete HTML Eleme…...

做漫画视频在线观看网站/百度seo简爱

作者简介&#xff1a;无花无酒&#xff0c;人称花酒兄&#xff0c;我估计可能这个人喜欢喝花酒&#xff0c;不过他很喜欢折腾KNX&#xff0c;也是KNX忠实粉丝&#xff0c;自家装修也用的是KNX系统&#xff0c;对于KNX的各种扩展应用也有比较高的造zhi(诣)&#xff01;这篇就是他…...

wordpress 登陆后查看/网站建设开发

前文说道了Action的激活&#xff0c;这里有个关键的操作就是Action参数的映射与模型绑定&#xff0c;这里即涉及到简单的string、int等类型&#xff0c;也包含Json等复杂类型&#xff0c;本文详细分享一下这一过程。&#xff08;ASP.NET Core 系列目录&#xff09; 一、概述 当…...

有没有做旅游攻略的网站/竞价排名营销

实时人群计算——设想 目的 做到实时人群打标技术 spark streaming在前段创建一些判断条件&#xff0c;例如订单访问次数等&#xff0c;以此为依据创建人群。spark streaming 周期从mysql拉取新创建的人群以batch进来的人为key&#xff0c;从kv存储中拉取当前人的信息把获取的数…...

ppt下一页/搜索引擎优化是什么意思啊

入门 《SSM企业级框架实战》 作者&#xff1a; 肖睿/丁慧洁/张宁彬 **简介&#xff1a;**框架(Framework)的本质为某种应用的半成品&#xff0c;即把不同应用程序中的共性内容抽取出来而形成的半成品程序。SSM框架是以Spring为核心&#xff0c;整合Spring MVC和Mybatis的轻量…...

怎么样再自己的网站做二级域名/推广宣传文案

技术创新正在变革医疗与健康产业&#xff0c;雷锋网持续关注医疗领域出现的软硬件创新&#xff0c;包括设备、数据&#xff0c;抑或对他们的创新运用。目前我们在招募医疗健康领域作者&#xff0c;负责采写报道医疗科技领域的企业与牛人。简历投递至zhangchileiphone.com&#…...