我在一个sql server数据库下有多个数据库。 来自application.properties文件。我在springboot中配置了默认架构。 现在我想使用相同的URL,usrname,pawd转向另一个数据库。
我怎么能改变这个?当我用
给出注释时@table (name = db2.dbo.tname)
它抛出错误说,
无法在数据库1中映射此dboject
这是我的配置:
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
我的应用程序使用应用程序属性上的默认db i。但我要连接到另一个数据库。 我怎么解决这个问题?
答案 0 :(得分:0)
您不能使用常规弹簧属性来执行此操作。这是一个关于如何连接到TWO数据库的示例(如果需要,可以更多):
首先,您必须禁用只能获取一个数据库的自动配置:
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
现在你只需要为JPA和Datasources提供自己的配置:
@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
entityManagerFactory
和datasource
以及您ll为不同的包启用JPA存储库和实体扫描,并使用不同的名称命名bean。
然后,如果您需要在方法中进行事务隔离,则必须提供transactionManager
名称,因为您有2:
@Transactional(transactionManager = "ds1TransactionManager")