2016-08-10 33 views
0

現在、1つのデータベースが接続されていて、動作しています。私は別の(そして結局2つ以上の)データベースに接続したいと思います。どうすればいいですか? アノテーションとプロパティファイルのみを使用するソリューションが必要です。SpringブートJPAで複数のデータベースに接続するには?

私はこの質問をHow to use 2 or more databases with spring?でも読んでいますが、それがあまりにもうまくいくかどうかわかりません。私はコントローラクラスを使用していないし、私はそれが何かを知っていない。私はまた、彼らが実際に特定のDOに接続する回答の中で言及しているどのように設定クラスがよく分からない。

これは私のapplication.propertiesファイルです:私はまた、新しいを作っ

package testApplication; 

import java.util.ArrayList; 
import java.util.List; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.boot.CommandLineRunner; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.orm.jpa.EntityScan; 
import org.springframework.cache.annotation.EnableCaching; 
import org.springframework.context.annotation.Bean; 
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 

import fileRetrieval.InputFileParse; 
import lmDataObjects.LMClientDO; 
import lmDataObjects.LoadMethodDO; 
import repositories.LMClientRepository; 
import repositories.LoadMethodRepository; 

@SpringBootApplication 
@EnableJpaRepositories(basePackageClasses = LoadMethodRepository.class) 
@EntityScan(basePackageClasses = LoadMethodDO.class) 
@EnableCaching 
public class Application { 

    private static final Logger log = LoggerFactory.getLogger(Application.class); 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Bean 
    public CommandLineRunner demo(LoadMethodRepository lm_repo, LMClientRepository lmc_repo) { 
     return (args) -> { 
      List<LMClientDO> lmlist = InputFileParse.getMultiGroupfile(); 

      List<String> uniqueMediaIds = new ArrayList(InputFileParse.getUniqueMediaIds()); 

      for (int i = 0; i < InputFileParse.getUniqueMediaIds().size(); i ++){ 
       lm_repo.save(new LoadMethodDO(uniqueMediaIds.get(i))); 
      } 

      for (int i = 0; i < lmlist.size(); i++){ 
       lmc_repo.save(new LMClientDO(lmlist.get(i).getClientId(), lmlist.get(i).getMediaId())); 
      } 
      //Here is where I would like to do stuff with data from the other database that I have not connected yet 

     }; 
    } 
} 

:これは私のアプリケーションファイルである(アウトマークされたユーザー名とパスワードが、そのそこに私のファイルに)

hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect 
hibernate.show_sql=true 
hibernate.format_sql=true 
hibernate.default_schema=dbo 
hibernate.packagesToScan=src.repositories.LMClientRepository.java 

spring.jpa.generate-ddl=true 
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy 
spring.datasource.username=*** 
spring.datasource.password=*** 
spring.datasource.url=jdbc:sqlserver://schqvsqlaod:1433;database=dbMOBClientTemp;integratedSecurity=false; 
spring.datasource.testOnBorrow=true 
spring.datasource.validationQuery=SELECT 1 
spring.jpa.database=dbMOBClientTemp 
spring.jpa.show-sql=true 
spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect 
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver 

application-MTS.propertiesという名前のプロパティファイルを作成し、新しいデータベースのデータをそこに格納します。それでもどうしたらいいか分からない。

spring.datasource.username=*** 
spring.datasource.password=*** 
spring.datasource.url=jdbc:sqlserver://SCHQVSQLCON2\VSPD:1433;database=dbMTS;integratedSecurity=false; 
+0

複数のJDBCソースに接続している場合は、手動で接続する必要があります。 – chrylis

+0

どうやってこれを行うのですか? – user3321551

+0

https://github.com/snicoll-demos/demo-multi-entity-managers –

答えて

0

Hibernateの場合、複数のhbm.xmlファイルを持ち、それをクラスに入れて使用することができます。このような

何か:

if ("yourCondition".equals(definedCondition)) { 
    sf = new Configuration().configure("example.cfg.xml").buildSessionFactory(); 
} else { 
    sf = new Configuration().configure("exampleTwo.cfg.xml").buildSessionFactory(); 
} 

あなたが別のデータベースを持っているし、xmlファイル内の情報をログインすることができます。

2つの別々の接続が必要な場合は、それらを別々のメソッドに格納し、それらを呼び出して複数のセッションを作成できます。

+1

OPは複数の接続を同時に設定したいと考えています。 – chrylis

+0

@chrylisこのコードでは、一度に複数の接続を持つこともできます。 2つのメソッドが2つの別々のXMLをロードしてから、それらからセッションを取得します。 –

+0

あなたは依存性注入のすべての利点を一掃しました。 – chrylis

2

Springデータはこれが一般的な使用例であると理解しています。これを行う方法の例を作成しました。 multiple-datasourcesのspring-data-examplesを確認します。

重要な側面は、2つのデータソースを定義するOrderConfigクラスとCustomerConfigクラスを見てみることです。

+0

あなたが指定した例では、プロパティファイルがないようです。これがなければ、これはどのようにして行われますか?データベースの名前、ユーザ名、パスワード、またはURLがどこに設定されているのかわかりません – user3321551

+0

文法的にデータソースを '@Bean 'として追加したい場合があります。public DataSource dataSource(){ BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName( "com.mysql.jdbc.Driver");dataSource.setUrl( "jdbc:mysql:// localhost:3306/test"); dataSource.setUsername( "root"); dataSource.setPassword( "secret");戻り値dataSource; ; } ' – yasaspramoda

関連する問題