Leo-zd opened a new issue, #33481:
URL: https://github.com/apache/shardingsphere/issues/33481

   ###### resource
   
   ```tex
   ShardingSphere  5.3.0  => 5.3.2
   Reason for upgrade: implements ShardingSphereDriverURLProvider, which 
implements customized fetching and decrypting of yaml configuration content.
   ```
   
   ###### error message
   
   ```java
   Error attempting to get column 'username' from result set.  Cause: 
java.sql.SQLFeatureNotSupportedException: Can not get index from column label 
`username`.
   ; Can not get index from column label `username`.; nested exception is 
java.sql.SQLFeatureNotSupportedException: Can not get index from column label 
`username`.
   org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting 
to get column 'username' from result set.  Cause: 
java.sql.SQLFeatureNotSupportedException: Can not get index from column label 
`username`.
   ; Can not get index from column label `username`.; nested exception is 
java.sql.SQLFeatureNotSupportedException: Can not get index from column label 
`username`.
        at 
org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:96)
        at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
        at 
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
        at 
org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
        at 
org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
        at com.sun.proxy.$Proxy115.selectList(Unknown Source)
        at 
org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
        at 
com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)
        at 
com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)
        at 
com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
        at 
com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
        at com.sun.proxy.$Proxy154.queryPage(Unknown Source)
   ```
   
   ###### config
   
   ```yaml
   spring:
       # ShardingSphereDriver配置
       datasource:
           driver-class-name: 
org.apache.shardingsphere.driver.ShardingSphereDriver
           url: jdbc:shardingsphere:classpath:sharding.yml
   ```
   
   ```yaml
   # 基础配置
   # JDBC 逻辑库名称。在集群模式中,使用该参数来联通 ShardingSphere-JDBC 与 ShardingSphere-Proxy。
   # 默认值:logic_db
   databaseName: logic_im_db
   
   # 运行模式配置,不配置则默认单机模式 单机,集群
   mode:
       # 运行模式类型。可选配置:Standalone、Cluster
       type: Standalone
       repository:
           # 持久化仓库类型 如果你选择集群方式,那么可以使用zookeeper、nacos等注册中心
           type: JDBC
   
   # 数据源集合
   dataSources:
       write_ds:
           driverClassName: com.mysql.cj.jdbc.Driver
           dataSourceClassName: com.zaxxer.hikari.HikariDataSource
           jdbcUrl: 
jdbc:mysql://xxx.xxx.xx:3306/xxx?useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=true&failOverReadOnly=false&allowMultiQueries=true
           username: root
           password: 123456
           initializationFailTimeout: 1
           validationTimeout: 5000
           maxLifetime: 1800000
           leakDetectionThreshold: 0
           minimumIdle: 1
           idleTimeout: 60000
           maximumPoolSize: 20
           connectionTimeout: 30000
           poolName: HikariPool-write_ds
           ConnectionTestQuery: SELECT 1
       read_ds_0:
           driverClassName: com.mysql.cj.jdbc.Driver
           dataSourceClassName: com.zaxxer.hikari.HikariDataSource
           username: read
           password: 123456
           jdbcUrl: 
jdbc:mysql://xxx.xxx.xx:3306/xxx?useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=true&failOverReadOnly=false&allowMultiQueries=true
           initializationFailTimeout: 1
           validationTimeout: 5000
           maxLifetime: 1800000
           leakDetectionThreshold: 0
           minimumIdle: 1
           idleTimeout: 60000
           maximumPoolSize: 20
           connectionTimeout: 30000
           poolName: HikariPool-read_ds_0
           ConnectionTestQuery: SELECT 1
       read_ds_1:
           driverClassName: com.mysql.cj.jdbc.Driver
           dataSourceClassName: com.zaxxer.hikari.HikariDataSource
           username: read
           password: 123456
           jdbcUrl: 
jdbc:mysql://xxx.xxx.xx:3306/xxx?useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=true&failOverReadOnly=false&allowMultiQueries=true
           initializationFailTimeout: 1
           validationTimeout: 5000
           maxLifetime: 1800000
           leakDetectionThreshold: 0
           minimumIdle: 1
           idleTimeout: 60000
           maximumPoolSize: 20
           connectionTimeout: 30000
           poolName: HikariPool-read_ds_0
           ConnectionTestQuery: SELECT 1
   
   # 规则配置
   rules:
       # 分片配置
       - !SHARDING
           tables:
               # 逻辑表名称
               im_user_message:
                   # 由数据源名 + 表名组成(参考 Inline 语法规则)
                   #                actualDataNodes: 
write_ds.im_user_message_${[2021, 2022, 2023, 2024, 2025]}
                   actualDataNodes: write_ds.im_user_message_${[2024, 2025]}
                   # 分表策略,同分库策略
                   tableStrategy:
                       # 用于单分片键的标准分片场景
                       standard:
                           # 分片列名称,多个列以逗号分隔
                           shardingColumn: create_time
                           # 分片算法名称
                           shardingAlgorithmName: date_algorithms
           defaultTableStrategy:
               none:
           # 绑定表规则列表
           #        bindingTables:
           #            - t_order,t_order_item
   
           # 广播表规则列表(需要和分片的表进行关联的化就需要配置)
           broadcastTables:
               - im_user_account
               - im_group
   
           # 分片算法配置
           shardingAlgorithms:
               # 时间范围分片算法
               date_algorithms:
                   type: INTERVAL
                   props:
                       # 分片字段格式
                       datetime-pattern: 'yyyy-MM-dd HH:mm:ss'
                       # 范围下限,格式与 datetime-pattern 定义的时间戳格式一致
                       datetime-lower: '2022-01-01 00:00:00'
                       # 范围上限,格式与 datetime-pattern 定义的时间戳格式一致
                       datetime-upper: '2030-01-01 00:00:00'
                       # 分片数据源或真实表的后缀格式,必须遵循 Java DateTimeFormatter 的格式,必须和 
datetime-interval-unit 保持一致。例如:yyyyMM
                       sharding-suffix-pattern: 'yyyy'
                       # 分片键时间间隔,超过该时间间隔将进入下一分片
                       datetime-interval-amount: 1
                       # 分片键时间间隔单位,必须遵循 Java ChronoUnit 的枚举值。例如:MONTHS
                       datetime-interval-unit: 'YEARS'
   
           # 分布式序列算法配置
           keyGenerators:
               # <key_generate_algorithm_name> (+): # 分布式序列算法名称
               snowflake:
                   # 分布式序列算法类型
                   type: SNOWFLAKE
   
       # 读写分离配置
       - !READWRITE_SPLITTING
           dataSources:
               # <data_source_name> (+): # 读写分离逻辑数据源名称
               readwrite_ds:
                   # 读写分离类型  可选值:staticStrategy(静态读写分离)  
dynamic_strategy(动态读写分离)
                   staticStrategy:
                       # 写库数据源名称
                       writeDataSourceName: write_ds
                       # 读库数据源名称,多个从数据源用逗号分隔
                       readDataSourceNames:
                           - read_ds_0
                           - read_ds_1
                   # 负载均衡算法名称
                   loadBalancerName: alg_round
           # 负载均衡算法配置
           loadBalancers:
               # <load_balancer_name> (+): # 负载均衡算法名称
               # 轮询负载均衡算法 说明: 事务内,读请求根据 transaction-read-query-strategy 
属性的配置进行路由。事务外,采用轮询策略路由到 replica。
               alg_round:
                   # 负载均衡算法类型
                   type: ROUND_ROBIN
                   # 负载均衡算法属性配置
                   props:
                       # 事务内读请求路由策略,可选值:FIXED_PRIMARY(路由到 
primary)、FIXED_REPLICA(根据随机策略选择一个固定的 replica)、DYNAMIC_REPLICA(根据随机策略路由到不同的 
replica),默认值:FIXED_PRIMARY。
                       transaction-read-query-strategy: FIXED_PRIMARY
   # 属性配置
   # 是否打印sql
   #props:
   #    sql-show: true
   ```
   
   ```java
     @Override
       public PageUtils queryPage(JSONObject params) {
           Query<MessageRecordViewEntity> query = new 
Query<>(MessageRecordViewEntity.class);
           IPage<MessageRecordViewEntity> page = 
messageRecordMapper.queryPage(query.getPage(params), 
query.getQueryWrapper(params));
           return new PageUtils(page);
       }
   ```
   
   ```java
   IPage<MessageRecordViewEntity> queryPage(Page<MessageRecordViewEntity> page, 
@Param("ew") QueryWrapper<MessageRecordViewEntity> queryWrapper);
   ```
   
   ```mysql
   <select id="queryPage" 
resultType="com.telecom.im.entity.view.MessageRecordViewEntity">
           SELECT * FROM (
           SELECT
           `a`.`id` AS `msg_id`,
           `a`.`msg_from` AS `id`,
           `b`.`username` AS `username`,
           `b`.`avatar` AS `avatar`,
           `a`.`content` AS `content`,
           `a`.`create_time` AS `timestamp`,
           `a`.`msg_to` AS `msg_to`,
           `c`.`username` AS `to_user_name`,
           `a`.`msg_type` AS `type`,
           `a`.`group_id` AS `group_id`,
           `a`.`is_read` AS `is_read`,
           `a`.`req_state` AS `req_state`,
           `a`.`system_id` AS `system_id`,
           `a`.`stars` AS `stars`,
           `a`.`tag` AS `tag`
           FROM
           `im_user_message` `a`
           LEFT JOIN `im_user_account` `b` ON `a`.`msg_from` = `b`.`id`
           LEFT JOIN `im_user_account` `c` ON `a`.`msg_to` = `c`.`id`
           ) t1
           <if test="ew != null">
               ${ew.customSqlSegment}
           </if>
       </select>
   ```
   
   ###### Trying to resolve
   
   ```
   Rollback solves it, but my need to rewrite the 
ShardingSphereDriverURLProvider. 
   ```
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: 
notifications-unsubscr...@shardingsphere.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to