Tomcat升级到5.5,数据源无法使用的问题整理

Spring整合Tomcat JNDI数据源实战指南 JNDI(Java Naming and Directory Interface)是Java平台标准的命名与目录服务接口,其核心原理是通过逻辑名称解耦资源定位与实现细节,实现容器级资源统一治理。在企业级Java Web应用中,JNDI为DataSource提供了跨应用、可审计、环境无关的注入机制,显著提升安全合规性与运维可控性。尤其在金融、政务等强监管场景下,结合Tomcat容器管理的数据源,能有效规避密码硬编码、连接参数分散、多环境配置不一致等典型工程痛点。本文聚焦Spring框架如何精准对接Tomcat 阅读详情
近日已经有多人询问此问题,这里简单的说明一下,希望遇到此问题的朋友有帮助
5.0中的配置如下 
<Resource name="jdbc/student" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/student">
  
<parameter>
    
<name>factory</name>
    
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  
</parameter>
  
<parameter>
    
<name>username</name>
    
<value>root</value>
  
</parameter>
  
<parameter>
    
<name>password</name>
    
<value>sa</value>
  
</parameter>
  
<parameter>
    
<name>driverClassName</name>
    
<value>com.mysql.jdbc.Driver</value>
  
</parameter>
  
<parameter>
    
<name>url</name>
    
<value>jdbc:mysql:// localhost:3306/student?useUnicode=true&amp;characterEncoding=UTF-8</value>
  
</parameter>
  
<parameter>
    
<name>maxActive</name>
    
<value>20</value>
  
</parameter>
  
<parameter>
    
<name>maxIdle</name>
    
<value>5</value>
  
</parameter>
  
<parameter>
    
<name>maxWait</name>
    
<value>10000</value>
  
</parameter>
</ResourceParams>
 在5.5下面,报的异常如下
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

解决方法:
其实在5.5的文档里面,已经给出了配置的标准写法。将数据源修改为如下格式即可

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
  maxActive
="100" maxIdle="30" maxWait="10000"
  username
="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
  url
="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>
TongWeb部署实战:从Tomcat迁移的典型问题与解决方案 Java应用服务器是承载企业级Web应用的核心基础设施,其核心原理在于提供Servlet容器、管理应用生命周期和资源。在信创国产化背景下,从Tomcat等主流服务器向TongWeb迁移成为常见需求,这涉及类加载机制、配置管理等底层差异。理解类加载器的双亲委派模型及冲突原理,对于解决迁移中高频出现的NoClassDefFoundError等异常至关重要。这类问题的技术价值在于保障应用在异构环境下的稳定运行,是系统平滑迁移和国产化替代的关键。典型的应用场景包括金融、政务等行业的系统重构与升级。本文聚焦TongW 阅读详情

相关推荐

Ubuntu 20.04下Tomcat 10反向代理与TLS安全加固实战

Web服务器反向代理是现代Java应用部署的核心架构模式,其本质是通过Nginx或Apache等成熟C语言服务实现SSL/TLS终止、请求过滤与负载分发,从而卸载Tomcat的加密计算压力并增强边界防护能力。该方案基于HTTP/HTTPS协议栈分层原理,将传输层安全(TLS)、网络层访问控制(IP限流/白名单)与应用层防护(路径过滤、头信息加固)有机协同,显著提升系统安全性、性能稳定性与运维弹性。典型应用场景包括Spring Boot微服务网关、教育SaaS平台、政务后台系统等需满足等保合规、浏览器安全策略

an4455的博客 453

通过myeclipse启动tomcat的问题

最近遇到一个很奇怪的问题,就是通过myeclipse启动tomcat的时候,我程序中并没有断点,但是eclipse会提示到debug视图。看了下,是在oracle的数据库驱动那里停下了,google了一下,没有找到解决办法,各位帮忙看看。   Daemon System Thread [Finalizer] (Suspended (exception NullPointerExcepter))...

zhangbo237的博客 141

Java EE工程实战:从类加载隔离到JTA事务的生产级避坑指南

Java EE不是Java语法的延伸,而是运行在Servlet容器中的企业级规范体系。它通过类加载隔离保障模块独立性,依托生命周期托管实现资源自动回收,并借助JNDI上下文绑定统一管理数据源等外部依赖。其技术价值在于支撑高并发、可伸缩、可维护的Web服务,典型应用场景包括电商订单系统、金融支付网关和SaaS多租户平台。深入理解ClassLoader机制、Servlet线程模型与JTA分布式事务原理,是跨越‘能写代码’到‘能扛流量’的关键断层。本文聚焦真实项目中高频出现的ClassNotFoundExcept

weixin_33696106的博客 469

java配置使用数据源

1. 数据源的定义: 数据源是数据库连接池里面的概念,连接池就是指当服务器启动时,先建立几个连接,在应用需要与数据库连接时,就从连接池里获取,使用完以后,不是将连接断掉,而是放回到池里面,这样就减少了数据连接创建的次数,大大提高了连接性能。而数据源就是给服务器一个配置信息,然服务器就知道怎么使用JDBC驱动,比如url参数,数据库实例名、用户名与密码等等。Java中的数据源就是javax.s

听雨轩 2156

tomcat5.0.x与tomcat5.5.x的配置有较大区别

tomcat5.0.x与tomcat5.5.x的配置有较大区别在</context></host>之间加入下列代码:

C语言 100道经典编程题适用于专升本,专接本【详细分析版】_c语言专升本题目

/法2//left指向起始 right指向数组末尾= 0){left++;//如果*left是奇数就循环接着向后指,直到指向偶数就退出//(left

2401_84978503的博客 695

tomcat安装及配置教程_Tomcat到Wildfly:配置数据库连接

tomcat安装及配置教程 该摘录摘自《从Tomcat到WildFly 》一书,您将在其中学习如何将现有的Tomcat体系结构移植到WildFly,包括服务器配置和运行在其顶部的应用程序。 WildFly是完全兼容的Java Enterprise Edition 7容器,与Tomcat相比,它具有更多的可用服务和选项集。 该书还将使您了解迁移期间可能发生的最常见的陷阱和弊端。 目录 1....

cunfen9460的博客 486

航测无人机las点云数据生成DEM

“ 做航测的同僚都知道,Pix4D或者CC(ContextCapture)都可以生成DSM,往往高程点提取以及土方计算都需要用到DEM,PhotoScan软件可以提出地面点并只应用地面点连接三角网,然而分类效果差,生成的DEM不管是平整度还是精度,都不理想。而传统等高线生DEM需要耗费较长时间,以下提供一种参考方法,供大家探讨。 ” 1 点云数据 航测类软件大多可以生成点云数据,如Pix4D,PhotoScan,CC等,此次点云数据为citymapper2相片基于CC生产的Las点云。 2 筛选地面点 筛.

qq_43173805的博客 1万+

超详细Tomcat版本升级教程

本文就介绍了tomcat版本升级。踩坑:Tomcat安装包要选择bin目录下,不要选择src目录下的。src是源码包,看代码的。

hyprintf的博客 2万+

谷粒商城学习笔记-15-数据库初始化

这一节的主要内容是把创建对应的数据库和数据库表。

epitomizelu的专栏 1438

3D Slicer + MONAI Bundle实战:如何用Wholebrainseg模型快速分割133个脑区(附避坑指南)

本文详细介绍了如何利用MONAI Model Zoo中的Wholebrainseg模型,在3D Slicer环境中高效分割133个脑区。文章重点提供了数据预处理、GPU推理加速及结果精修等实战技巧与避坑指南,旨在帮助医学影像研究者和开发者提升全脑分割的精度与效率。

311

配置tomcat数据源碰到的问题

[size=large]描述: 将tomcat工程部署好后,报错"Cannot create JDBC driver of class '' for connect URL 'null'". 解决: 在tomcat的conf目录中的context.xml中配置数据源信息,错误消失。但这不是个好的方法,因为context.xml中部署的数据源会运用于所有的webapp,属于全局性质。 最好还...

黑暗中摸索 365

ADAS系统架构与核心功能解析:从感知到执行的智能驾驶方案

高级驾驶员辅助系统(ADAS)是现代汽车智能化的核心技术,其本质是通过传感器融合、算法决策与车辆控制,构建一个“感知-决策-执行”的闭环系统。在技术原理上,ADAS依赖摄像头、毫米波雷达、激光雷达等多源传感器进行环境感知,并通过深度学习模型与融合算法(如卡尔曼滤波)构建精准的环境模型。其技术价值在于提供主动安全冗余与驾驶舒适性,核心应用场景包括自动紧急制动(AEB)、自适应巡航(ACC)及车道保持辅助(LKA)等。随着传感器成本下降与域控制器算力提升,ADAS正从高端配置向主流车型快速普及,并逐步向高阶导航

weixin_31062533的博客 418

GeoServer数据源配置实战:从字符编码到路径规范的深度解析

本文深入解析GeoServer数据源配置中的字符编码和路径规范问题,提供从诊断到解决的完整方案。通过实战案例和代码示例,详细讲解如何统一多环境编码、规避特殊字符陷阱,并分享中文环境下的配置技巧与自动化检测方法,帮助用户高效解决GeoServer数据发布中的常见难题。

weixin_30703911的博客 537

6、深入解析Microsoft 365核心服务对比与迁移策略

本文深入解析了Microsoft 365的核心服务,包括身份和设备管理、现代设备配置体验、Exchange和SharePoint的迁移策略以及Microsoft Teams的协作功能。同时探讨了迁移过程中需要考虑的安全控制措施,为组织规划和实施云迁移项目提供了全面的指导和建议。

k8s6orchestrator的博客 107

华为OD机试真题 新系统 【社交网络相同爱好好友查询】

华为od机试真题 新系统【社交网络相同爱好好友查询】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试真题【社交网络相同爱好好友查询】多语言题解实现。

qq_45776114的博客 1336

ruoyi整合netty,部署到weblogic

ruoyi整合netty,部署到weblogic遇见的问题记录

mian0ting的博客 3295

《二、企业级监控系统之Prometheus监控node_exporter》

文章目录一、部署node_exporter服务二、部署prometheus服务2.1、部署node_exporter服务三、grafana之添加数据源四、grafana之导入监控模板五、grafana之修改模板变量六、grafana之修改仪表板变量总结 > 这里是引用 一、部署node_exporter服务 docker run -d --restart=always --name node_exporter --net=“host” --pid=“host” -v “/:/host:ro,

东城绝神 1万+

部署MySQL数据库的项目从5.0更改到8.0版本需要做的修改

众所周知mysql数据库5.0到8.0版本又巨大的变化,这就导致了我们如果升级了数据库版本或者重构代码后就必须做大量的修改。 代码的更改 驱动jar包的更改 首先驱动jar包必须做出改变 ,对数据库 及对应的驱动版本整理如下 Connector/J8.0.12支持 Mysql8.0.12 Connector/J 5.1 支持 Mysql 4.1、Mysql 5.0、Mysql 5.1...

weixin_43865493的博客 6241

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

企业级TOMCAT部署实战:高并发电商系统案例

特别是一键部署功能,省去了手动配置Nginx和TOMCAT的繁琐步骤,让调试效率提升不少。:修改server.xml中的Connector配置,将maxThreads调整为800(根据压测结果确定),acceptCount设为200。:采用3节点Nginx+TOMCAT集群模式,Nginx作为反向代理实现负载均衡,后端三台TOMCAT应用服务器做水平扩展。:在8核16G的标准配置下,单节点TOMCAT可稳定处理800QPS,集群整体吞吐量达到2400QPS,平均响应时间保持在200ms以内。

EmeraldEagle36的博客 150

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java高级进阶知识整理

2.1(学习Java技术体系,设计模式,流行的框架与组件,常见的设计模式,编码必备,Spring5,做应用必不可少的最新框架,MyBatis,玩数据库必不可少的组件…链接:https://www.jianshu.com/p/08c8da8ffcd8。简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。网站从零到分布式架构演变与知识体系介绍。学会思维导图解读开源项目,积累经验。利用思维导图快速学习主流框架。正向代理与反向代理的区别。

2509_93869480的博客 345

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux下Tomcat安装配置实战:权限、JVM调优与systemd服务化

Tomcat作为Java Web应用的核心容器,其在Linux环境的部署远不止解压启动——本质是Linux系统权限模型、JVM类加载与内存管理、网络栈绑定及服务化治理的综合工程实践。理解`/opt/tomcat`目录权限继承规则、`systemd`服务单元中`Environment`变量的作用域、`JAVA_HOME`与`CATALINA_HOME`的隔离逻辑,是规避`Permission denied`和`JAVA_HOME not set`等高频故障的前提;而科学设定`-Xms/-Xmx`需结合`fre

weixin_34128237的博客 399

【springboot】万字操作指南 Spring Boot 2.x 升级到 3.x:微服务项目实战

摘要: 本文提供Spring Boot 2.x升级到3.x的实战指南,重点针对微服务项目。升级涉及JDK 17、Spring Framework 6、Jakarta EE等连锁变化,需系统规划版本矩阵(如Spring Boot 3.5.x + Spring Cloud 2025.0.x)。建议升级路线:先统一JDK 17环境,再处理依赖迁移(javax→jakarta)、Spring Security 6适配、OAuth2授权服务器改造等关键步骤。

Cjh20pan的博客 975
上一篇: javascript源代码格式化工具
下一篇: 把JspWrite 转化为 Reader
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值