2017-01-02 79 views
0

我有一个单一的SQL服务器数据库下的多个数据库。 from application.properties文件。我已经配置为在springboot中默认模式。 现在我想chage到另一个数据库具有相同的URL,usrname,pawd。春季启动多个数据库配置与微软的SQL服务器

我该如何改变这一点?当我给注释了类

@table (name = db2.dbo.tname) 

它抛出的错误说法,

无法将这个dboject数据库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 

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

回答

0

你不能使用普通的弹簧属性来做到这一点。这里是你如何可以连接到两个数据库(或更多,如果你需要)一个例子:

首先,你必须禁用拿起只是一个数据库的自动配置:

@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数据源这个类的一个副本上,您将有第二组transactionManagerentityManagerFactorydatasource和O n您将为不同的软件包启用JPA Repositories和Entity扫描并为不同名称的Bean命名。

然后,如果你需要在一个方法的事务隔离,你必须提供transactionManager名字,因为你有2个:

@Transactional(transactionManager = "ds1TransactionManager")

+0

在数据源URL – Ulises