2017-01-02 6 views
0

複数のデータベースが1つのSQL Serverデータベースの下にあります。 application.propertiesファイルの 私はspringbootでスキーマをデフォルトに設定しました。 今、同じurl、usrname、pawdを持つ別のデータベースにchageしたいと思います。spring boot複数のデータベース構成とMicrosoft SQL Server

これはどのように変更できますか?

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 

:私は

@table (name = db2.dbo.tname) 

とクラスの上に注釈を与えるときには、エラーと言って、ここでは1

データベースにこのdbojectをマッピングすることができませんでし

は私の設定だがスローされます私のアプリケーションは、アプリケーションのプロパティで与えたデフォルトのdbで動作します。私は別のデータベースに接続する必要があります。 どうすれば解決できますか?

答えて

0

これを行うには、通常の春のプロパティを使用することはできません。あなただけの1 DB拾う自動無効にする必要が

まず:ここでは、(あなたが必要な場合は以上)は2つのデータベースに接続する方法の例です

@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; 
    } 
} 

はあなたがtransactionManagerentityManagerFactorydatasourceとoの第2のセットを持っていますどのds2データソースのために、このクラスのコピーを持つことができますnを使用すると、異なるパッケージのJPAリポジトリとエンティティスキャンを有効にし、異なる名前のBeanに名前を付けます。データソースURLに

@Transactional(transactionManager = "ds1TransactionManager")

+0

:あなたはメソッドでトランザクション分離が必要な場合には2を持っていると思いますので、

その後、あなたはtransactionManager名前を提供する必要があります – Ulises

関連する問題