2016-09-05 6 views
0

I持っているコントローラ、サービスやDAOクラスのシングルトンどのようにDBの同時実行性を達成するには?

ダオクラス:

@Autowired 
JdbcTemplate jdbcTemplate; 

    @Override 

    public String addUsers(UserDTO userDto) throws Exception { 
     // TODO Auto-generated method stub 
     System.out.println("JDBC TEMPLATE::"+jdbcTemplate); 
     String query="Insert into users values('"+userDto.getUserName()+"')"; 
     System.out.println(query); 
    jdbcTemplate.update(query); 
    return "success"; 
    } 

applicationContext.xmlを私はJdbcTemplateを使用していたDAOクラスで

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 



<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" > 

     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/demo" /> 
     <property name="username" value="" /> 
     <property name="password" value="" /> 
    </bean> 

シングルトンとのdataSource Beanとして定義されていますシングルトンです。今、私は疑問以下のいる

1)私のJdbcTemplateがシングルトンであるとのdataSource Beanがシングルトンである場合、それらは同時要求のための任意の問題を引き起こすのでしょうか?

2)これは、JdbcTemplate Beanを作成してDAoに挿入する理想的な方法ですか?

3)要求スコープは、インスタンス変数を保持するクラスがある場合にのみ存在する必要がありますか?

答えて

1

DBと同時に作業できるように、接続プーリングを使用することをお勧めします。

複数のリクエストが同時に「到着」する場合、それぞれの接続プールは専用の接続を割り当ててDBに対して動作します。

もちろん、これはDBの同じ「エリア」にアクセスしていないことを確認する責任があります。

MySql DBでは、このようなシナリオではロック機構があることを知っていますが、詳細な調査をすることをおすすめします。

2よく知られている接続プールがあります。

  1. ApacheのDBCP http://commons.apache.org/proper/commons-dbcp/
  2. C3PO http://www.mchange.com/projects/c3p0/

より詳細な説明:

プーリング

接続それは技術ですマルチを許可するデータベースへのアクセスを提供するキャッシュされた共有および再利用可能な接続オブジェクトのセットを使用することができます。

データベース接続のオープン/クローズは高価なプロセスであるため、接続プールは、プール内の接続オブジェクトを維持するデータベース上のコマンド実行のパフォーマンスを向上させます。

複数のクライアント要求を処理するために同じ接続オブジェクトの再利用を容易にします。

クライアントリクエストが受信されるたびに、プールは利用可能な接続オブジェクトが検索され、空き接続オブジェクトを取得する可能性が高くなります。

そうでない場合は、(プール内にすでに存在しており、特定の実装や構成がサポートできるどのように多くの接続数に応じて)のいずれかの着信要求をキューに登録されたり、新しい接続オブジェクトが作成され、プールに追加されます。

接続オブジェクトを使用して要求が終了すると、オブジェクトはキューに入れられた要求の1つに割り当てられたプールから戻されます(キューに格納された要求を処理するための特定の接続プール実装のスケジューリングアルゴリズムに基づいて) 。

+0

素晴らしい!説明のおかげで、私はすでに多くの研究をしてきましたが、今はあなたの努力に感謝の意を表明しています。 :) –

関連する問題