Java 添加第二个数据源-SpringBoot RepositoryRestService PersistenceConfig

Java 添加第二个数据源-SpringBoot RepositoryRestService PersistenceConfig,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我正试图找到向应用程序添加第二个数据源的最佳方法。主要目的是通过rest向db公开CRUD操作,并需要跳转到第二个db以进行身份验证和角色管理。我们没有使用XML配置 有没有办法简单地在现有PersistenceConfig.java文件中添加第二个数据源bean,或者我们需要为第二个db实例复制整个config类 申请书: 包装食品 import foo.config.PersistenceConfig; import foo.config.RepositoryRestConfig; impo

我正试图找到向应用程序添加第二个数据源的最佳方法。主要目的是通过rest向db公开CRUD操作,并需要跳转到第二个db以进行身份验证和角色管理。我们没有使用XML配置

有没有办法简单地在现有PersistenceConfig.java文件中添加第二个数据源bean,或者我们需要为第二个db实例复制整个config类

申请书:

包装食品

import foo.config.PersistenceConfig;
import foo.config.RepositoryRestConfig;
import foo.config.WebConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@Configuration
@ComponentScan
@EnableJpaRepositories
@Import({PersistenceConfig.class, WebConfig.class, RepositoryRestConfig.class})
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
回购协议:

package foo.repository;

import foo.Widget;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

import java.util.List;

@RepositoryRestResource(collectionResourceRel = "widgets", path = "widgets")
public interface WidgetsRepository extends CrudRepository<Widget, Long> {
    List<Widget> findByWidgetId(@Param("widgetid") long widgetId);
}   

感谢您的帮助……

请查看
@Qualifier
注释。使用此注释,您可以定义相同类型的各种bean并为它们指定名称。它相当于
bean
XML标记中的
id
参数


这是。

首先,值得注意的是,
PersistenceConfig
中的几乎所有配置都是冗余的,因为Spring Boot会自动为您配置它。几乎只有一件事是非默认的,您需要指定的是您的数据源配置,例如SQLServerURL

有一个示例描述了如何使用
@Primary
应用程序配置两个数据源

创建多个数据源的工作原理与创建第一个数据源的工作原理相同。如果您使用的是JDBC或JPA的默认自动配置,您可能希望将其中一个标记为@Primary(然后任何@Autowired注入都会选择该配置)。”

然后使用
application.properties
datasource.primary
datasource.secondary
前缀配置这两个数据源:

例如:

datasource.primary.jdbcUrl=jdbc:sqlserver://127.0.0.1:1433;databaseName=fooDB
datasource.primary.user=sa
datasource.primary.password=secret

datasource.primary.jdbcUrl=jdbc:sqlserver://127.0.0.1:1433;databaseName=barDB
datasource.primary.user=sa
datasource.primary.password=secret

但是,您没有解释如何将次要数据源用于具体的存储库Crudepository。
@Bean
@Primary
@ConfigurationProperties(prefix="datasource.primary")
public DataSource primaryDataSource() {
    return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix="datasource.secondary")
public DataSource secondaryDataSource() {
    return DataSourceBuilder.create().build();
}
datasource.primary.jdbcUrl=jdbc:sqlserver://127.0.0.1:1433;databaseName=fooDB
datasource.primary.user=sa
datasource.primary.password=secret

datasource.primary.jdbcUrl=jdbc:sqlserver://127.0.0.1:1433;databaseName=barDB
datasource.primary.user=sa
datasource.primary.password=secret