java - Spring boot 无法访问多个数据源

标签 java spring spring-mvc spring-boot

我是 Spring 和 Spring boot 新手,我正在尝试访问两个数据源,但我只能连接到一个数据源。

当我尝试调用访问第二个数据源的函数时,调用将转到第一个数据源,并且出现以下错误,

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'testify.test' doesn't exist

我已按照以下教程进行多数据库访问,我的代码与 Roufid 链接中的代码类似,

  1. Roufid
  2. Baeldung

有人可以指出我遗漏了什么或我在哪里犯了错误吗?

下面是代码文件,

AConfig.java

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "aEntityManager",
transactionManagerRef = "aTransactionManager",
basePackages = "test.serv")
public class AConfig {

@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource.adb")
public DataSource aDataSource() {
    return DataSourceBuilder.create().build();
}

@Primary
@Bean(name="aEntityManager")
public LocalContainerEntityManagerFactoryBean mysqlEntManFactory(EntityManagerFactoryBuilder build) {
    return build.dataSource(aDataSource()).persistenceUnit("aPU").build();
}

@Primary
@Bean(name="aTransactionManager")
public PlatformTransactionManager mysqlTransactionManager(@Qualifier("aEntityManager") EntityManagerFactory enManFact) {
    return new JpaTransactionManager(enManFact);
}
}

BConfig.java

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "bEntityManager",
transactionManagerRef = "bTransactionManager",
basePackages = "test.serv")
public class BConfig {

@Bean
@ConfigurationProperties(prefix="spring.datasource.bdb")
public DataSource bDataSource() {
    return DataSourceBuilder.create().build();
}

@Bean(name="bEntityManager")
public LocalContainerEntityManagerFactoryBean mysqlEntManFactory(EntityManagerFactoryBuilder build) {
    return build.dataSource(bDataSource()).persistenceUnit("bPU").build();
}

@Bean(name="bTransactionManager")
public PlatformTransactionManager mysqlTransactionManager(@Qualifier("bEntityManager") EntityManagerFactory enManFact) {
    return new JpaTransactionManager(enManFact);
}
}

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
     version="2.0">
<persistence-unit name="aPU"  transaction-type="RESOURCE_LOCAL">
</persistence-unit>
<persistence-unit name="bPU" transaction-type="RESOURCE_LOCAL">
</persistence-unit>
</persistence>

Service.java

public interface Service extends CrudRepository<X, Integer> {
@Query(value = "select y from test where x = :x", nativeQuery = true)
List<Object[]> findByName(@Param("x") String x);
}

最佳答案

问题是您的存储库类(Service)位于同一个包中

@EnableJpaRepositories(entityManagerFactoryRef = "bEntityManager",
transactionManagerRef = "bTransactionManager",
basePackages = "test.serv")

basePackages = "test.serv"

将其移至单独的包中。这应该有效

关于java - Spring boot 无法访问多个数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47989155/

相关文章:

java - 使用hibernate时的困境

java - 将 2 个列表插入标签 <c :forEach> for loop Lists synchronously

java - Spring Boot 不加载静态资源

java - 具有自定义 View 的旋转动画

java - 获取事务中自增字段的值

java - 如何在 Spring 的 Rest 中上传时验证文件类型、大小?

java - Spring @ExceptionHandler 不捕获 AccessDeniedException

java - 将 JAX-WS 2.2.5 客户端与 JDK/JRE 1.5 一起使用

java - IDEA "never accessed"关于增量运算符++的警告

java - Spring MVC 表单处理