私はデータベースから同じデータを取り出しますが、それはどのように可能ですか?私はデータベースからフェッチしたスプリングコンテキストでどのように結果を設定するのですか?
私はデータベースにヒットし、毎回同じ結果をフェッチするシナリオを持っています。したがって、私のオブジェクトをスプリングコンテキストで追加し、毎回コンテキストからフェッチします。
私はデータベースから同じデータを取り出しますが、それはどのように可能ですか?私はデータベースからフェッチしたスプリングコンテキストでどのように結果を設定するのですか?
私はデータベースにヒットし、毎回同じ結果をフェッチするシナリオを持っています。したがって、私のオブジェクトをスプリングコンテキストで追加し、毎回コンテキストからフェッチします。
スプリングキャッシュAPIを使用する必要があります。初めてCacheableメソッドのスプリングチェックを呼び出し、loadメソッドを実行して(結果をキャッシュに入れる)、2回目のスプリングはメソッド呼び出しの結果があることをチェックし、キャッシュからresaltを返します。メソッドを実行しません。ここで
はあなたのコードに基づい例example from spring web siteとbetter example そしてapi
@Component
public class SimpleBookRepository implements BookRepository {
@Override
@Cacheable("books")
public Book getByIsbn(String isbn) {
simulateSlowService();
return new Book(isbn, "Some book");
}
// Don't do this at home
private void simulateSlowService() {
try {
long time = 3000L;
Thread.sleep(time);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
}
}
です:
@Component
public class MasterDataLoader implements InitializingBean {
private Set<String> country = new HashSet<String>();
@Override
public void afterPropertiesSet() throws Exception {
country = getknowledgebase();
}
@Cacheable("country")
public Set<String> getknowledgebase() {
Connection con = null;
Set<String> country =new HashSet<>();
try {
con = ConnectionProvider.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM knowledgebase");
while (rs.next()) {
if (rs.getString("country") != null) {
country.add(rs.getString("country").toLowerCase());
}
}
rs.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return country;
}
}
- コンストラクタは、それはあなたの最高の場所ではありませんいくつかのロジックを行う必要があります、ロジックをいくつかのプライベートメソッドに変換し、コンストラクタから呼び出す方がよい。
アップデート2:ケースのため あなたはすべてのデータをすることができますし、彼らは時間
@Component
public class MasterDataLoader implements InitializingBean {
private Set<String> country = new HashSet<String>();
private Set<String> streets = new HashSet<String>();
private Set<String> state = new HashSet<String>();
public Set<String> getCountry() {
return country;
}
public Set<String> getStreets() {
return streets;
}
public Set<String> getState() {
return state;
}
@Override
public void afterPropertiesSet() throws Exception {
loadCachedData();
}
private void loadCachedData() {
Connection con = null;
try {
con = ConnectionProvider.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM knowledgebase");
while (rs.next()) {
if (rs.getString("country") != null) {
country.add(rs.getString("country").toLowerCase());
streets.add(rs.getString("street").toLowerCase());
state.add(rs.getString("state").toLowerCase());
}
}
rs.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
とデータが
@Cacheable("country")
public Set<String> getCountry() {
return method that load country from DB;
}
@Cacheable("street")
public Set<String> getStreets() {
return method that load street from DB;
}
@Cacheable("state")
public Set<String> getState() {
return method that load state from DB;
}
Beanを作成し、私のロジックをコンストラクタに入れて私たちは、iocコンテナによって作成されたbeanがデフォルトでアプリケーションコンテキストに置かれていることを知っていますか? – shriram
どのように表示する必要がありますか? – xyz
@Component パブリッククラスMasterDataLoader { \tセット
乗りを変更する可能性がある場合にはDBに変更しないでくださいキャッシュを見てください。 Springはキャッシングをサポートしています:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html –