在我们的应用程序中,我们使用Spring Boot和sqljdbc4。罐子
我们需要连接到同一架构内的不同数据库(目录)(这意味着它们位于同一sql server实例中)。所以,我们需要以这样一种方式配置数据源:它可以连接到多个数据库,并且可以毫无问题地执行数据库操作。但当尝试连接时,它抛出下面的错误
无效对象
表\u名称
发现错误。//我没有完整的堆栈跟踪,但主要错误是前面提到的无效对象错误。
因此,我们配置了两个数据源,源代码如下所示
项目结构:
src/main/java
- com.foobar
- foo
- domain
- repo
- bar
- domain
- repo
spring.datasource.jdbc-url=jdbc:jdbc:microsoft:sqlserver://HOST:1433;it_foo ```(important note: it_foo will be replaced with qa_foo in different environment which will be managed by profiles)
spring.datasource.username=fooadmin
spring.datasource.password=foo123
spring.datasource.driver-class-name=com.microsoft.jdbc.sqlserver.SQLServerDriver
bar.datasource.jdbc-url=jdbc:jdbc:microsoft:sqlserver://HOST:1433;it_bar(important note: it_foo will be replaced with qa_foo in different environment which will be managed by profiles)
bar.datasource.username=baradmin
bar.datasource.password=bar123
bar.datasource.driver-class-name=com.microsoft.jdbc.sqlserver.SQLServerDriver
foo数据库的数据源配置
package com.foobar;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
basePackages = { "com.foobar.foo.repo" }
)
public class FooDbConfig {
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean
entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("dataSource") DataSource dataSource
) {
return builder
.dataSource(dataSource)
.packages("com.foobar.foo.domain")
.persistenceUnit("foo")
.build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactory") EntityManagerFactory
entityManagerFactory
) {
return new JpaTransactionManager(entityManagerFactory);
}
}
bar的数据源配置
med “BarDbConfig.java”
package com.foobar;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "barEntityManagerFactory",
transactionManagerRef = "barTransactionManager",
basePackages = { "com.foobar.bar.repo" }
)
public class BarDbConfig {
@Bean(name = "barDataSource")
@ConfigurationProperties(prefix = "bar.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "barEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean
barEntityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("barDataSource") DataSource dataSource
) {
return
builder
.dataSource(dataSource)
.packages("com.foobar.bar.domain")
.persistenceUnit("bar")
.build();
}
@Bean(name = "barTransactionManager")
public PlatformTransactionManager barTransactionManager(
@Qualifier("barEntityManagerFactory") EntityManagerFactory
barEntityManagerFactory
) {
return new JpaTransactionManager(barEntityManagerFactory);
}
}
整体代码与此链接中的代码相同:https://medium.com/@joeclever/using-multiple-datasources-with-spring-boot-and-spring-data-6430b00c02e7
我还浏览了以下链接:如何配置SpringBoot以使用两个数据库?
Spring boot连接mysql中的多个模式
我遵循了许多教程来找到最佳解决方案,并通过了不同的堆栈溢出帖子,但没有一个合适的解决方案
简而言之,我需要满足这些要求。
为了找出这个问题的最佳解决方案,所以如果我们需要配置更多的数据库或模式,当前代码应该根本不会影响。
它应该适用于具有不同数据库名称的不同配置文件/环境。
编辑:使用上面的代码可以很好地工作,但是由于数据库位于同一个数据库服务器实例中,是否有其他优化的解决方案,以便只配置一个数据源?
我建议您在应用程序的每个实例(实体)中添加目录。这种方式:
@Table(name = "test",catalog = "database_test",schema = "dbo")
问题内容: 我正在寻找一种处理以下情况的方法: 我们有一个数据库服务器,上面有多个数据库(所有数据库都有相同的架构,不同的数据)。 我们正在寻找一种查询所有数据库的方法(并且它易于配置,因为可以随时添加更多数据库)。此数据访问必须是实时的。 举例来说,假设您有一个插入订单的应用程序- 每个应用程序都有自己的数据库等。我们正在寻找的是一种有效的方式,使单个应用程序可以访问所有其他数据库中的订单信息,
我想创建一个应用程序,我想有多个数据库,这意味着不止两个,至少三个。这可能吗?如果是,请在此处解释。
我正在用spring boot开发一个应用程序。我使用Mysql数据库来实现持久性。我的数据库在远程服务器上。如何为远程数据库连接配置数据源? 请帮助我在属性文件和数据源bean配置中使用我的配置类中的注释来配置它。
问题内容: 如何在Zend Framework 2中配置(和使用)多个数据库?目前,我在global.php中有以下内容: 但是我看不到添加第二种方法。 问题答案: 如果查看Zend \ Db \ Adapter \ AdapterServiceFactory,您会看到适配器配置仅指向一个键。这意味着它构建的适配器将始终使用此(唯一)配置密钥。 我建议您创建自己的工厂,如下所示: 在您的主模块(或
我试图从同一个服务器上的数据库的旧备份创建一个新数据库。当使用SQL服务器管理工作室并试图从备份恢复到新数据库时,我得到这个错误 在谷歌搜索之后,我找到了这段代码 我想知道移动语句是否会干扰备份来自该服务器的数据库? 谢谢,感谢所有的帮助。
问题内容: 我的源表和目标表存在于不同的服务器上。我 用来编写合并语句以使其同步。 谁能解释我如何引用存在于我内部不同服务器上的两个不同数据库 ? 问题答案: 可能的方法: 我建议采用以下方法,而不是尝试在两个数据库服务器之间使用 语句 。 方法1: 为每个SQL Server实例创建两个。例如,如果您有两个数据库SourceDB和DestinationDB,则可以创建两个名为 和的连接管理器 。