当前位置: 首页 > 知识库问答 >
问题:

Spring boot将特定的DataSource分配给JpaRepository

常心水
2023-03-14

我有两个数据源,我试图为每个JpaRepositories分配一个特定的数据源。我使用的是spring boot框架。主数据源的使用率约为90%,而辅助数据源的使用率约为10%,因此最好默认为主数据源,并且仅在需要时分配辅助数据源。我试着使用这里的文档https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html,但我不认为这正是我所需要的。任何提示都很好!

spring.datasource.configuration.url=jdbc:postgresql://localhost:5432/mydatabase
spring.datasource.configuration.username=dockerusername
spring.datasource.configuration.password=dockerpassword
spring.datasource.configuration.driver-class-name=org.postgresql.Driver

spring.datasource.cached.url=jdbc:hsqldb:mem:main
spring.datasource.cached.driver-class-name=org.hsqldb.jdbc.JDBCDriver

spring.datasource.initialize=false
spring.jpa.database=default
spring.jpa.hibernate.ddl-auto=update

配置文件

@Configuration
@ComponentScan({"com.praeses.gov"})
public class Config {
@Bean
@ConfigurationProperties("spring.datasource.configuration")
public DataSourceProperties configDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@ConfigurationProperties("spring.datasource.configuration")
public DataSource configDataSource() {
    return configDataSourceProperties().initializeDataSourceBuilder().build();
}

@Bean
@Primary
@ConfigurationProperties("spring.datasource.cached")
public DataSourceProperties cachedDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@Primary
@ConfigurationProperties("spring.datasource.cached")
public DataSource cachedDataSource() {
return cachedDataSourceProperties().initializeDataSourceBuilder().build();
    }

使用主数据源的存储库

@Qualifier("spring.datasource.cached")
@Repository("spring.datasource.cached")
public interface GeoitemRepository extends JpaRepository<Geoitem, String> {
}

使用辅助数据源的存储库

@Qualifier("spring.datasource.configuration")
@Repository("spring.datasource.configuration")
public interface GeoitemhistoryRepository extends JpaRepository<Geoitemhistory, String> {
}

共有1个答案

令狐凌
2023-03-14

你可以在下面的链接中做类似的事情。只需创建两个配置文件,而不是一个(每个数据源一个),然后将它们都添加到主应用程序中。

此外,在属性文件中,给出如下内容:

datasource.local.url=
datasource.local.driver-class-name=
datasource.local.username=
datasource.local.password=

datasource.primary.url=
datasource.primary.driver-class-name=
datasource.primary.username=
datasource.primary.password=

另外,在主数据源的配置文件中为LocalContainerEntityManagerFactoryBean平台TransactionManager提供@Primary注释。

有关更多详细信息,请参阅此答案:https://stackoverflow.com/a/44971911/6775742

 类似资料:
  • 我正在尝试限制kubernetes仪表板上的a用户,该仪表板在我创建后连接到kubectl。他和相应的配置的crt。 我成功地限制了他可以使用以下role.yaml 和簇绑定 让他能够进入仪表板。问题是,我只希望他能够访问名称空间。 我已经搜索了一些,一些解决方案似乎涉及创建一个服务帐户,另一个问题可能是因为查看仪表板的权限是在集群角色上授予的,并且无法命名。 有没有最好的方法来解决这个问题?

  • k8s节点关联文档解释了如何通过首先用标签标记节点并使用nodeSelector选择节点来将pod部署到特定节点。 但是,我有一个用例,我在集群中有40-50个部署,我希望向集群添加一个新节点,并将该节点设置为专用于其中一个部署/吊舱,而不更改所有那些没有指定nodeSelector的部署 我唯一能想到的是污染节点,但如果我这样做了,没有一个豆荚会被调度到那里。 这里有没有一个更好的方法来实现这个

  • 问题内容: 我有一个哈希图,我想复制该哈希图以用于其他用途。但是,每当我复制并重复使用它时,它也会更改原始内容。这是为什么? 提前致谢 问题答案: 您要做的不是创建地图的副本,而是创建地图的副本。当两个引用指向同一对象时,对一个对象的更改将在另一个对象中反映出来。 解决方案1:如果这是从某种简单类型到另一种类型的Map,则应改为: 这称为复制构造函数。几乎所有标准的Collection和Map实现

  • 我记得有一个数据结构保证某个字符串只能接收特定的值,它的工作原理就像一个接口什么的。我不记得这个数据结构的确切名称,也不容易找到它。 让我试着解释一下上下文。 假设我有一个名为 Foo 的类,其中包含参数位置。 如果我分配值顶部、底部或中间的位置,位置将被接受。如果我分配另一个值,它将引发异常。 我知道我可以做一个简单的if else或switch并抛出一个异常,但是我想找到这个特定的数据结构。

  • 29.1 配置DataSource Java的javax.sql.DataSource接口提供了使用数据库连接的标准方法。传统上,DataSource使用URL以及一些凭据来建立数据库连接。 可以在“How-to”章节中查看更多高级示例,一般可以完全控制DataSource的配置。

  • 问题内容: 假设我有一个功能 现在,我想将函数分配给一个名为的变量,这样,如果我使用,它将再次调用该函数。如果我只是做作业,它就会返回。 问题答案: 您根本不调用该函数。 括号告诉蟒蛇,你调用的函数,所以当你把它们放在那里,它调用的功能,并指定值 返回 的(在这种情况下)。