您好,我通过命名空间引用sharding,一致报下面这个错误:
2020-02-28 
15:49:18.884|ywwl-alarm-api|ERROR|o.s.boot.diagnostics.LoggingFailureAnalysisReporter.report:42|

***************************
APPLICATION FAILED TO START
***************************

Description:

file 
[D:\workspace\alarm-api\alarm-api-dal\target\classes\com\ywwl\alarm\api\dal\dao\BusinessAlarmConfigMapper.class]
 required a single bean, but 2 were found:
- dataSource0: defined in file 
[D:\workspace\alarm-api\alarm-api-web\target\classes\spring\spring-mybatis.xml]
- shardingDataSource: defined in null

我的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xmlns:tx="http://www.springframework.org/schema/tx";
       
xmlns:sharding="http://shardingsphere.apache.org/schema/shardingsphere/sharding";
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://shardingsphere.apache.org/schema/shardingsphere/sharding
       
http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding.xsd ">

    <bean id="dBSelfPwdCallback" 
class="com.ywwl.alarm.api.dal.common.DBSelfPwdCallback" lazy-init="true"/>

    <!-- 配置数据源 -->
    <bean id="dataSource0" class="com.alibaba.druid.pool.DruidDataSource" 
destroy-method="close">
      <property name="driverClassName" value="${driver}" />
      <property name="url" value="${url}" />
      <property name="username" value="${username}" />
      <property name="password" value="${password}" />

      <!-- 初始化连接大小 -->
      <property name="initialSize" value="${initialSize}"></property>
      <!-- 连接池最大数量 -->
      <property name="maxActive" value="${maxActive}"></property>
      <!-- 连接池最大空闲 maxIdle参数已经被弃用
      <property name="maxIdle" value="${maxIdle}"></property>-->
      <!-- 连接池最小空闲 -->
      <property name="minIdle" value="${minIdle}"></property>
      <!-- 获取连接最大等待时间 -->
      <property name="maxWait" value="${maxWait}"></property>
      <!-- 超过时间限制是否回收 -->
        <!--<property name="removeAbandoned" value="${removeAbandoned}" />-->
        <!-- 超过时间限制多长; -->
        <property name="removeAbandonedTimeout" 
value="${removeAbandonedTimeout}" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" 
value="${timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" 
value="${minEvictableIdleTimeMillis}" />
        <!-- 用来检测连接是否有效的sql,要求是一个查询语句-->
        <!-- <property name="validationQuery" value="${validationQuery}" />   
-->
        <!-- 申请连接的时候检测 -->
        <!--<property name="testWhileIdle" value="${testWhileIdle}" />  -->
        <!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
        <!--<property name="testOnBorrow" value="${testOnBorrow}" />  -->
        <!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能  -->
        <!--<property name="testOnReturn" value="${testOnReturn}" />  -->
        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <!--<property name="poolPreparedStatements" 
value="${poolPreparedStatements}" />       -->
        <property name="maxPoolPreparedStatementPerConnectionSize" 
value="${maxPoolPreparedStatementPerConnectionSize}" />
        <!--属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:                   
                      监控统计用的filter:stat  
                      日志用的filter:log4j  
                     防御SQL注入的filter:wall -->

      <!--
        <property name="filters" value="${filters}" />
      -->
        <property name="passwordCallback" ref="dBSelfPwdCallback"/>
        <property name="connectionInitSqls" value="set names utf8mb4;"/>
        <property name="connectionProperties" 
value="config.decrypt=${druid.config.decrypt};config.decrypt.key=${druid.config.decrypt.publicKey};password=${password}"
 />


        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="true"/>

        <!-- 监控数据库 -->
        <property name="filters" value="mergeStat"/>
        <!--手动提交-->
        <property name="defaultAutoCommit" value="${defaultAutoCommit}"/>
    </bean>


    <!-- 配置分表算法 -->
    <bean id="shardingAlgorithm" 
class="com.ywwl.alarm.api.sharding.ShardingAlgorithm" />
    <sharding:standard-strategy id="orderTableStrategy" 
sharding-column="root_time"  precise-algorithm-ref="shardingAlgorithm" />

    <sharding:data-source id="shardingDataSource">
        <sharding:sharding-rule data-source-names="dataSource0" 
default-data-source-name="dataSource0">
            <sharding:table-rules>
                <sharding:table-rule logic-table="business_monitor_log"  
table-strategy-ref="orderTableStrategy" />
            </sharding:table-rules>
            <sharding:binding-table-rules>
                <sharding:binding-table-rule 
logic-tables="business_monitor_log"/>
            </sharding:binding-table-rules>
        </sharding:sharding-rule>
    </sharding:data-source>

    <!-- Spring整合Mybatis,更多查看文档:http://mp.baomidou.com -->
    <bean id="sqlSessionFactory" 
class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="shardingDataSource"/>
        <!-- 自动扫描Mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>

        <!-- 配置 Mybatis 配置文件(可无) -->
        <property name="configLocation" 
value="classpath:mybatis/mybatis-config.xml"/>
         <!--  切换一种方式,不配置configLocation  -->
       <property name="configurationProperties">
           <props>
               <prop key="cacheEnabled">true</prop>
               <prop key="callSettersOnNulls">true</prop>
           </props>
       </property>

         <!-- 配置包别名 -->
        <property name="typeAliasesPackage" 
value="com.ywwl.api.demo.api.dal.po"/>
        <property name="plugins">
            <array>
                <!-- 分页插件配置 -->
                <bean id="paginationInterceptor" 
class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
                    <property name="dialectType" value="mysql"/>
                </bean>
            </array>
        </property>
       <!-- 全局配置注入 -->
       <property name="globalConfig" ref="globalConfig" />
   </bean>

   <!-- 定义 MP 全局策略 -->
   <bean id="globalConfig" 
class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
       <!--
         AUTO->`0`("数据库ID自增")
         INPUT->`1`(用户输入ID")
         ID_WORKER->`2`("全局唯一ID")
         UUID->`3`("全局唯一ID")
      -->
       <property name="idType" value="0" />
      <!--
         MYSQL->`mysql`
         ORACLE->`oracle`
         DB2->`db2`
         H2->`h2`
         HSQL->`hsql`
         SQLITE->`sqlite`
         POSTGRE->`postgresql`
         SQLSERVER2005->`sqlserver2005`
         SQLSERVER->`sqlserver`
      -->
      <property name="dbType" value="mysql"/>

      <!-- Oracle需要添加该项 -->
       <!-- <property name="dbType" value="oracle" /> -->

       <!-- 全局表为下划线命名设置 true -->
       <property name="dbColumnUnderline" value="true" />
   </bean>

    <!-- MyBatis 动态扫描  -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ywwl.api.demo.api.dal.dao"/>
    </bean>

    <!-- 配置事务管理 -->
    <bean name="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="shardingDataSource"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

使用的mybatieplus插件。希望能得到你们答案。谢谢



Reply via email to