gpt4 book ai didi

javascript - Spring Boot 与 microsoft sql server 的多数据库配置

转载 作者:行者123 更新时间:2023-11-28 05:10:22 27 4
gpt4 key购买 nike

我在一个 sql server 数据库下有多个数据库。来自 application.properties 文件。我已在 springboot 中配置为默认架构。现在我想使用相同的 url、usrname、pawd 更改另一个数据库。

我该如何改变这个?当我用

对类进行注释时
@table (name = db2.dbo.tname)

它会抛出错误,

unable to map this dboject in database 1

这是我的配置:

spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testdb;integratedSecurity=false;

spring.datasource.username=sa
spring.datasource.password=myPassword
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerConnection
spring.datasource.initialize=true

我的应用程序使用我在应用程序属性上提供的默认数据库。但我必须连接到另一个数据库。我该如何解决这个问题?

最佳答案

您不能使用常规 Spring 属性来做到这一点。以下是有关如何连接到两个数据库(或更多,如果需要的话)的示例:

首先,您必须禁用仅拾取一个数据库的自动配置:

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})

现在您只需为 JPA 和数据源提供自己的配置:

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "ds1EntityManagerFactory",
transactionManagerRef = "ds1TransactionManager",
basePackageClasses = Ds1Repository.class)
public class DataSource1Config {

@Bean
PlatformTransactionManager ds1TransactionManager() {
return new JpaTransactionManager(tfccgEntityManagerFactory().getObject());
}

@Bean
LocalContainerEntityManagerFactoryBean ds1EntityManagerFactory() {

HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

factoryBean.setDataSource(ds1());
factoryBean.setJpaVendorAdapter(vendorAdapter);
factoryBean.setPackagesToScan(Ds1Entity.class.getPackage().getName());
factoryBean.getJpaPropertyMap().put("hibernate.dialect", dialect);
factoryBean.getJpaPropertyMap().put("hibernate.show_sql", showSQL);
factoryBean.getJpaPropertyMap().put("hibernate.globally_quoted_identifiers", quoteIdentifiers);

return factoryBean;
}

@Bean
DataSource ds1() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClass);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setMaxTotal(maxTotal);
dataSource.setInitialSize(initialSize);
dataSource.setMaxIdle(maxIdle);
return dataSource;
}
}

您可以为 ds2 数据源拥有此类的副本,在该数据源上您将拥有第二组 transactionManager entityManagerFactorydatasource,您将为不同的包启用 JPA 存储库和实体扫描,并使用不同的名称命名 Bean。

然后,如果您需要在方法中进行事务隔离,则必须提供 transactionManager 名称,因为您有 2 个:

@Transactional(transactionManager = "ds1TransactionManager")

关于javascript - Spring Boot 与 microsoft sql server 的多数据库配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41434476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com