转-spring配置数据库连接池druid-from-cnblogs-大象踢足球

<div id="topics">
    <div class="post">
        <h1 class="postTitle">
            <a id="cb_post_title_url" class="postTitle2" href="https://www.cnblogs.com/Jason-Xiang/p/6586311.html">spring配置数据库连接池druid</a>
        </h1>
        <div class="clear"></div>
        <div class="postBody">
            <div id="cnblogs_post_body" class="blogpost-body"><h1><strong>连接池原理</strong></h1>
<p>连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等,也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。</p>
<p>&nbsp;</p>
<h1><strong>常用数据库连接池及特点</strong></h1>
<ul>
<li>dbcp:DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP。</li>
<li>c3p0:c3p0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。</li>
<li>druid:阿里出品,淘宝和支付宝专用数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。支持所有JDBC兼容的数据库,包括 &nbsp; Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
<p>Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。</p>
<p>Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。</p>
<p>简单SQL语句用时10微秒以内,复杂SQL用时30微秒。</p>
<p>通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。</p>
</li>
</ul>
<p>&nbsp;</p>
<h1><strong>spring中配置druid连接池</strong></h1>
<p>由于druid的性能优于dbcp和c3p0,加上后两个已经不怎么更新了,所以这里只介绍druid的配置方法。</p>
<p>首先需要在pom文件中加入相应依赖:</p>
<div class="cnblogs_code">
<pre><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span>
    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span>com.alibaba<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span>
    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span>druid<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span>
    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span>版本<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span>
<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
<p>在spring的applicationContext.xml中配置druid:</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" οnclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="dataSource"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="com.alibaba.druid.pool.DruidDataSource"</span><span style="color: #ff0000;"> init-method</span><span style="color: #0000ff;">="init"</span><span style="color: #ff0000;"> destroy-method</span><span style="color: #0000ff;">="close"</span><span style="color: #0000ff;">&gt;</span>
     <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 基本属性 url、user、password </span><span style="color: #008000;">--&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="driverClassName"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="${jdbc.driver}"</span> <span style="color: #0000ff;">/&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="url"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="${jdbc_url}"</span> <span style="color: #0000ff;">/&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="username"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="${jdbc_user}"</span> <span style="color: #0000ff;">/&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="password"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="${jdbc_password}"</span> <span style="color: #0000ff;">/&gt;</span>

     <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 配置监控统计拦截的filters </span><span style="color: #008000;">--&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="filters"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="stat"</span> <span style="color: #0000ff;">/&gt;</span>

     <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 配置初始化大小、最小、最大 </span><span style="color: #008000;">--&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxActive"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="20"</span> <span style="color: #0000ff;">/&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="initialSize"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="1"</span> <span style="color: #0000ff;">/&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="minIdle"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="1"</span> <span style="color: #0000ff;">/&gt;</span>

     <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 配置获取连接等待超时的时间 </span><span style="color: #008000;">--&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxWait"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="60000"</span> <span style="color: #0000ff;">/&gt;</span>     

     <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 </span><span style="color: #008000;">--&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="timeBetweenEvictionRunsMillis"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="60000"</span> <span style="color: #0000ff;">/&gt;</span>

     <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 配置一个连接在池中最小生存的时间,单位是毫秒 </span><span style="color: #008000;">--&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="minEvictableIdleTimeMillis"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="300000"</span> <span style="color: #0000ff;">/&gt;</span>

     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="testWhileIdle"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="true"</span> <span style="color: #0000ff;">/&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="testOnBorrow"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="false"</span> <span style="color: #0000ff;">/&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="testOnReturn"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="false"</span> <span style="color: #0000ff;">/&gt;</span>

     <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 打开PSCache,并且指定每个连接上PSCache的大小 </span><span style="color: #008000;">--&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="poolPreparedStatements"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="true"</span> <span style="color: #0000ff;">/&gt;</span>
     <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxOpenPreparedStatements"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="20"</span> <span style="color: #0000ff;">/&gt;</span>
 <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" οnclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>&nbsp;</p>
<h1 class="gh-header-title instapaper_title"><strong>DruidDataSource配置属性列表</strong></h1>
<div>
<div>
<div id="js-repo-pjax-container" data-pjax-container="">
<div class="container new-discussion-timeline experiment-repo-nav">
<div class="repository-content">
<div id="wiki-wrapper" class="wiki-wrapper page">
<div id="wiki-content" class="wiki-content">
<div class="has-rightbar">
<div id="wiki-body" class="wiki-body gollum-markdown-content instapaper_body">
<div class="markdown-body">
<p>DruidDataSource配置兼容DBCP,但个别配置的语意有所区别。</p>
<table>
<thead>
<tr><th>配置</th><th>缺省值</th><th>说明</th></tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>&nbsp;</td>
<td>配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错。<a href="http://blog.csdn.net/lanmo555/article/details/41248763">详情-点此处</a>。</td>
</tr>
<tr>
<td>url</td>
<td>&nbsp;</td>
<td>连接数据库的url,不同数据库不一样。例如:<br>mysql : jdbc:mysql://10.20.153.104:3306/druid2<br>oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto</td>

 


</tr>
<tr>
<td>username</td>
<td>&nbsp;</td>
<td>连接数据库的用户名</td>

 


</tr>
<tr>
<td>password</td>
<td>&nbsp;</td>
<td>连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。<a href="https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter">详细看这里</a></td>

 


</tr>
<tr>
<td>driverClassName</td>
<td>根据url自动识别</td>
<td>这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName</td>

 


</tr>
<tr>
<td>initialSize</td>
<td>0</td>
<td>初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时</td>

 


</tr>
<tr>
<td>maxActive</td>
<td>8</td>
<td>最大连接池数量</td>

 


</tr>
<tr>
<td>maxIdle</td>
<td>8</td>
<td>已经不再使用,配置了也没效果</td>

 


</tr>
<tr>
<td>minIdle</td>
<td>&nbsp;</td>
<td>最小连接池数量</td>

 


</tr>
<tr>
<td>maxWait</td>
<td>&nbsp;</td>
<td>获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。</td>

 


</tr>
<tr>
<td>poolPreparedStatements</td>
<td>false</td>
<td>是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。</td>

 


</tr>
<tr>
<td>maxPoolPreparedStatementPerConnectionSize</td>
<td>-1</td>
<td>要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100</td>

 


</tr>
<tr>
<td>validationQuery</td>
<td>&nbsp;</td>
<td>用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。</td>

 


</tr>
<tr>
<td>validationQueryTimeout</td>
<td>&nbsp;</td>
<td>单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法</td>

 


</tr>
<tr>
<td>testOnBorrow</td>
<td>true</td>
<td>申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。</td>

 


</tr>
<tr>
<td>testOnReturn</td>
<td>false</td>
<td>归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。</td>

 


</tr>
<tr>
<td>testWhileIdle</td>
<td>false</td>
<td>建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。</td>

 


</tr>
<tr>
<td>timeBetweenEvictionRunsMillis</td>
<td>1分钟(1.0.14)</td>
<td>有两个含义:<br>1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。<br>2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明</td>

 


</tr>
<tr>
<td>numTestsPerEvictionRun</td>
<td>30分钟(1.0.14)</td>
<td>不再使用,一个DruidDataSource只支持一个EvictionRun</td>

 


</tr>
<tr>
<td>minEvictableIdleTimeMillis</td>
<td>&nbsp;</td>
<td>连接保持空闲而不被驱逐的最长时间</td>

 


</tr>
<tr>
<td>connectionInitSqls</td>
<td>&nbsp;</td>
<td>物理连接初始化的时候执行的sql</td>

 


</tr>
<tr>
<td>exceptionSorter</td>
<td>根据dbType自动识别</td>
<td>当数据库抛出一些不可恢复的异常时,抛弃连接</td>

 


</tr>
<tr>
<td>filters</td>
<td>&nbsp;</td>
<td>属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:<br>监控统计用的filter:stat<br>日志用的filter:log4j<br>防御sql注入的filter:wall</td>

 


</tr>
<tr>
<td>proxyFilters</td>
<td>&nbsp;</td>
<td>类型是List,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系</td>

 


</tr>

 


</tbody>

 


</table>

 


</div>

 


</div>

 


</div>

 


</div>

 


</div>

 


</div>

 


</div>

 


</div>

 


</div>

 


</div>
<div class="container site-footer-container">
<div class="site-footer">
<p>&nbsp;</p>
<h1>Druid的监控统计功能</h1>
<h3 class="gh-header-title instapaper_title">1.配置StatFilter</h3>
<p class="gh-header-title instapaper_title">Druid内置提供一个StatFilter,用于统计监控信息。</p>
<p class="gh-header-title instapaper_title">配置详情请参考官方文档:</p>
<p class="gh-header-title instapaper_title"><a href="https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter" target="_blank">https://github.com/alibaba/druid/wiki/配置_StatFilter</a></p>
<p class="gh-header-title instapaper_title">&nbsp;</p>
<h3 class="gh-header-title instapaper_title">2.配置StatViewServlet</h3>
<p>Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。</p>
<p>配置详情请参考官方文档:</p>
<p><a href="https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE" target="_blank">https://github.com/alibaba/druid/wiki/配置_StatViewServlet配置</a></p>
<p class="gh-header-title instapaper_title">&nbsp;</p>
<p class="gh-header-title instapaper_title">&nbsp;</p>
<p class="gh-header-title instapaper_title">&nbsp;</p>
<p class="gh-header-title instapaper_title">&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>更多内容请参照官方文档:</p>
<p>https://github.com/alibaba/druid/wiki/首页</p>

 


</div>

 


</div>
<p>&nbsp;</p></div><div id="MySignature"></div>
<div class="clear"></div>
<div id="blog_post_info_block">
<div id="BlogPostCategory">分类: <a href="https://www.cnblogs.com/Jason-Xiang/category/690105.html" target="_blank">Mybatis</a>,<a href="https://www.cnblogs.com/Jason-Xiang/category/809143.html" target="_blank">Spring</a></div>
<div id="EntryTag"></div>
<div id="blog_post_info"><div id="green_channel">
        <a href="javascript:void(0);" id="green_channel_digg" οnclick="DiggIt(6586311,cb_blogId,1);green_channel_success(this,'谢谢推荐!');">好文要顶</a>
            <a id="green_channel_follow" οnclick="follow('dc299430-7af7-e411-b908-9dcfd8948a71');" href="javascript:void(0);">关注我</a>
    <a id="green_channel_favorite" οnclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>
    <a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" οnclick="ShareToTsina()"><img src="//common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>
    <a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" οnclick="shareOnWechat()"><img src="//common.cnblogs.com/images/wechat.png" alt=""></a>
</div>
<div id="author_profile">
    <div id="author_profile_info" class="author_profile_info">
            <a href="http://home.cnblogs.com/u/Jason-Xiang/" target="_blank"><img src="//pic.cnblogs.com/face/sample_face.gif" class="author_avatar" alt=""></a>
        <div id="author_profile_detail" class="author_profile_info">
            <a href="http://home.cnblogs.com/u/Jason-Xiang/">大象踢足球</a><br>
            <a href="http://home.cnblogs.com/u/Jason-Xiang/followees">关注 - 8</a><br>
            <a href="http://home.cnblogs.com/u/Jason-Xiang/followers">粉丝 - 18</a>
        </div>
    </div>
    <div class="clear"></div>
    <div id="author_profile_honor"></div>
    <div id="author_profile_follow">
                <a href="javascript:void(0);" οnclick="follow('dc299430-7af7-e411-b908-9dcfd8948a71');return false;">+加关注</a>
    </div>
</div>
<div id="div_digg">
    <div class="diggit" οnclick="votePost(6586311,'Digg')">
        <span class="diggnum" id="digg_count">1</span>
    </div>
    <div class="buryit" οnclick="votePost(6586311,'Bury')">
        <span class="burynum" id="bury_count">0</span>
    </div>
    <div class="clear"></div>
    <div class="diggword" id="digg_tips">
    </div>
</div>
<script type="text/javascript">
    currentDiggType = 0;
</script></div>
<div class="clear"></div>
<div id="post_next_prev"><a href="https://www.cnblogs.com/Jason-Xiang/p/6565041.html" class="p_n_p_prefix">« </a> 上一篇:<a href="https://www.cnblogs.com/Jason-Xiang/p/6565041.html" title="发布于2017-03-17 11:38">Mybatis使用pageHelper步骤</a><br><a href="https://www.cnblogs.com/Jason-Xiang/p/6593329.html" class="p_n_p_prefix">» </a> 下一篇:<a href="https://www.cnblogs.com/Jason-Xiang/p/6593329.html" title="发布于2017-03-21 11:06">spring task定时器的配置使用</a><br></div>
</div>


        </div>
        <div class="postDesc">posted @ <span id="post-date">2017-03-20 14:04</span> <a href="https://www.cnblogs.com/Jason-Xiang/">大象踢足球</a> 阅读(<span id="post_view_count">11234</span>) 评论(<span id="post_comment_count">0</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=6586311" rel="nofollow">编辑</a> <a href="#" οnclick="AddToWz(6586311);return false;">收藏</a></div>
    </div>
    <script type="text/javascript">var allowComments=true,cb_blogId=227182,cb_entryId=6586311,cb_blogApp=currentBlogApp,cb_blogUserGuid='dc299430-7af7-e411-b908-9dcfd8948a71',cb_entryCreatedDate='2017/3/20 14:04:00';loadViewCount(cb_entryId);var cb_postType=1;var isMarkdown=false;</script>
    
</div>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值