結合DBC(MySQL、STS、Maven)—DBPP(HikariCP)
🚀 既存コードの問題
上記のselectメソッドを使用するユーザーがいると仮定します. ConnectionUtilのgetConnectionで新しい接続を受信します. 保留中の作業が完了した場合は、接続(@Cleanup)を閉じます.
一人で金庫に入って金を持って出る.
+同時に複数の人が接続していたら?
百人が同時に金庫に入って、お金を持って出てきた.
+クエリー(select)のほか、短時間で他のクエリーも使用されます.
->誰かが送金して、照会して、振り込んで、また照会して...
->ただ「コード上」で、以上の4つの業務が金庫に入ってから、一度に完了するのではなく、金庫に入って送金し、出てから中に入って調べ、出てから中に入って振り替えて...
+1つのサービスが2つ以上のクエリー文で構成されている場合?
-> ..?!??!
🚀 データベース接続プール(DBPP)の使用理由上記の理由によるデータベースのオーバーロードを防止するため(エラーが発生する場合は再接続が必要) .インタフェースを所定数「予め」作成し、Poolを形成する. は事前に作成されているので、生成に時間はかかりません. 「 poolで借りて、まだ・・・」再利用します. が借りられないと「待機」状態になります. ライブラリ を追加空登録 ドライバが情報(url、id、pw)にロードおよび戻る接続を含む. というデータソースの接続プール を作成します.
既存コードに対する修正 ConnectionUtil.Javaの削除 ドライバのロードとHikariConfigは関連情報を提供するため、 .には、 という集合のデータソースがあります.
SampleDAOの変更
登録されているdataSourceという空の自動インジェクションを単一ジェネレータに
(@Component+@AllArgConstructor+component-scan(コードスキップ)
connection = dataSource.getConnection()
テストコードの変更
既存のenumを使用して単一トーンを実現->beanを使用して を実現
public void select(){
String sql = "select * from tbl_board where bno > ?";
try {
@Cleanup Connection connection=ConnectionUtil.INSTANCE.getConnection();
@Cleanup PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 4);
@Cleanup ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()) {
resultSet.getInt(1);
resultSet.getString(2);
resultSet.getString(3);
}
}catch(SQLException e) {
e.printStackTrace();
}
}
上記のselectメソッドを使用するユーザーがいると仮定します.
一人で金庫に入って金を持って出る.
+同時に複数の人が接続していたら?
百人が同時に金庫に入って、お金を持って出てきた.
+クエリー(select)のほか、短時間で他のクエリーも使用されます.
->誰かが送金して、照会して、振り込んで、また照会して...
->ただ「コード上」で、以上の4つの業務が金庫に入ってから、一度に完了するのではなく、金庫に入って送金し、出てから中に入って調べ、出てから中に入って振り替えて...
+1つのサービスが2つ以上のクエリー文で構成されている場合?
-> ..?!??!
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.0</version>
</dependency>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName"
value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy">
</property>
<property name="jdbcUrl" value="jdbc:log4jdbc:mysql://localhost:3306/****" >
</property>
<property name="username" value="****"></property>
<property name="password" value="****"></property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
SampleDAOの変更
登録されているdataSourceという空の自動インジェクションを単一ジェネレータに
(@Component+@AllArgConstructor+component-scan(コードスキップ)
connection = dataSource.getConnection()
@Component
@AllArgsConstructor
public class SampleDAO {
private DataSource dataSource;
public void select(){
String sql = "select * from tbl_board where bno > ?";
try {
@Cleanup Connection connection=dataSource.getConnection();
@Cleanup PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 4);
@Cleanup ResultSet resultSet = preparedStatement.executeQuery();
//생략
}catch(SQLException e) {
e.printStackTrace();
}
}
}
既存のenumを使用して単一トーンを実現->beanを使用して
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class Tests {
@Setter(onMethod_ = @Autowired)
private SampleDAO dao;
@Test
public void test1() throws Exception {
//SampleDAO.INSTANCE.select();
dao.select();
}
}
Reference
この問題について(結合DBC(MySQL、STS、Maven)—DBPP(HikariCP)), 我々は、より多くの情報をここで見つけました https://velog.io/@sonchanwoo/JDBC-연동MySQL-STS-maven-DBCP-HikariCP-tt6r3t77テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol