Java 在Spring Boot和MyBatis项目中配置多个数据源时,会发生BindingException

Java 在Spring Boot和MyBatis项目中配置多个数据源时,会发生BindingException,java,spring-boot,datasource,mybatis,datamapper,Java,Spring Boot,Datasource,Mybatis,Datamapper,这个问题出现了。我尝试在Spring Boot和MyBatis项目中配置两个数据源,但出现异常: org.apache.ibatis.binding.BindingException:无效的绑定语句 (未找到):com.bookSystem.mapper.UserDao.findByDomain位于 org.apache.ibatis.binding.MapperMethod$SqlCommand。(MapperMethod.java:227) ~[mybatis-3.4.6.jar:3.4.6

这个问题出现了。我尝试在Spring Boot和MyBatis项目中配置两个数据源,但出现异常:

org.apache.ibatis.binding.BindingException:无效的绑定语句 (未找到):com.bookSystem.mapper.UserDao.findByDomain位于 org.apache.ibatis.binding.MapperMethod$SqlCommand。(MapperMethod.java:227) ~[mybatis-3.4.6.jar:3.4.6]at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:49) ~[mybatis-3.4.6.jar:3.4.6]at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.6.jar:3.4.6]at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.6.jar:3.4.6]at com.sun.proxy.$Proxy83.findByDomain(未知源)~[na:na]at bookSystem.serviceImp.UserServiceImp.findByDomain(UserServiceImp.java:72) sun.reflect.NativeMethodAccessorImpl.invoke0(本机)处的~[classes/:na] 方法)~(na:1.8.0_171)at invoke(NativeMethodAccessorImpl.java:62) ~(na:1.8.0_171)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]位于java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]

应用程序属性

# multiple datases
spring.datasource.primary.driverClassName = com.mysql.jdbc.Driver
spring.datasource.primary.url = jdbc:mysql://127.0.0.1/book?useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.datasource.primary.username = root
spring.datasource.primary.password = 123456
spring.datasource.primary.initialization-mode=always

spring.datasource.second.driverClassName = com.mysql.jdbc.Driver
spring.datasource.second.url = jdbc:mysql://127.0.0.1/newBook?useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.datasource.second.username = root
spring.datasource.second.password = 123456
spring.datasource.second.initialization-mode=always

mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
映射程序目录

项目开始

@SpringBootApplication( exclude = {
        DataSourceAutoConfiguration.class, 
        DataSourceTransactionManagerAutoConfiguration.class
})
@EnableTransactionManagement
public class BookSystemApplication {
}
数据源配置

@Configuration
public class DataSourceConfig {
    @Bean(name = "primaryDataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.second")
    public DataSource secondDataSource() {
        return DataSourceBuilder.create().build();
    }
}
主数据源

@Configuration
@MapperScan(basePackages = {"com.bookSystem.mapper"}, sqlSessionFactoryRef = "primarySqlSessionFactory")
public class MyBatisPrimaryDbConfig {
    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource primaryDataSource;

    @Bean
    public SqlSessionFactory primarySqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(primaryDataSource);
        return factoryBean.getObject();
    }

    @Bean
    public SqlSessionTemplate primarySqlSessionTempmlate() throws  Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(primarySqlSessionFactory());
        return template;
    }
}
交易

@Configuration
public class TransactionConfig {
    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource primary;

    @Autowired
    @Qualifier("secondDataSource")
    private DataSource second;

    @Bean(name="primaryTx")
    @Primary
    public PlatformTransactionManager primaryTransaction() {
        return new DataSourceTransactionManager(primary);
    }

    @Bean(name="secondTx")
    public PlatformTransactionManager secondTransaction() {
        return new DataSourceTransactionManager(second);
    }
}
用户道

package com.bookSystem.mapper;

@Mapper
public interface UserDao {
    public User findByDomain(String domainName);
}
userMapper.xml,使用主数据源

<mapper namespace = "com.bookSystem.mapper.UserDao">
    <select id="findByDomain" resultMap= "userResultMap">
        SELECT
            u.userId as user_user_id,
            u.userName as user_user_name,
            u.domainName as user_domain_name,
            u.department as user_department,
            u.title as user_title,
            u.date as user_date,
            u.password as user_password,
            u.accountRole as user_account_role
        FROM USER u
        WHERE u.domainName = #{domainName} 
    </select>
@Service("UserService")
public class UserServiceImp implements UserService {
    @Override
    public User findByDomain(String domainName) {
        User user = userDao.findByDomain(domainName);
        return user;
    } 
}