2017-03-06 5 views
0

に別の関数を実行したい(ドメイン、jdbcTemplate、MySQLは)は私がデータベースを使用して春のブートプロジェクトを持っている各データベース

が、別のプロジェクトのメンバーは、私のMySQLデータベースを接続することはできません。

ので、私は他のメンバーの春ブーツ提供する組み込みH2データベースを作りたい我々は

を開発するが、私は少し問題に会ったときだけでは、MySQLのSQLで、H2 SQLが異なっています。 csv data import sqlを使用する必要があります。

のmysql:CSVREAD(csvfile内)FROM INSERT INTOテーブルSELECT *

我々は、MySQLとH2のための各メソッドを作るならば、我々は我々が展開するときにコードを変更する必要があります。LOAD DATA ...... H2 。

この問題を解決するための解決方法はありますか?

おかげ:)

+1

このような問題を回避するために、Hibernateのような永続化APIを使用してください。 – rathna

+0

@ rathnaお返事ありがとうございます。私は私のプロジェクトにいくつかの情報を見つけました。私は私のプロジェクトが適切ではないと決めました。理由は第一に私は1M以上のデータを大量に管理しなければならないし、ORMに適していないジョブを実装する必要があります。テーブルを作成してデータを読み込みます。 – rura6502

答えて

0

インターフェースを実装し、プロファイルにコンポーネントをアクティブ別々のコンポーネントにデータベース固有のデータロードを実装します。ローカルでは、開発時に "ローカル"プロファイルでアプリを実行すると言います。このような何か:

public interface SpecialDataLoader { 
    void loadData(); 
} 

@Component 
// no @Profile annotation, will be used by default 
public class MySqlDataLoader implements SpecialDataLoader { 
    @Override public void loadData() { 
    // .. do it LOAD DATA way 
    } 
} 

@Component 
@Profile("local") // component will be used when "local" profile is active 
public class H2DataLoader implements SpecialDataLoader { 
    @Override public void loadData() { 
    // .. do it INSERT INTO table SELECT * FROM CSVREAD(csvfile) way 
    } 
} 

@Component 
public ClassThatUsesTheLoader { 

    @Autowired SpecialDataLoader specialDataLoader; // the right component will be autowired depending on the profile here 

    void useSpecialDataLoader() { 
    specialDataLoader.loadData(); 
    } 
} 

今ローカルで開発するときに、コマンドラインパラメータ--spring.profiles.active=localでアプリケーションを実行することができますし、H2DataLoaderが使用されます。プロダクションでは、プロファイルをまったく指定する必要はなく、MySqlDataLoaderが使用されます。

プロファイルにrelevant documentationを読んでくださいとその使用方法。、

関連する問題