スプリングブートコンテナで計算を行うオブジェクトがあります。それを「シート」と呼ぶことができます。アプリケーションの起動時に、10枚のシートをインスタンス化する必要があります。計算を開始するたびに、余分なスレッドで実行されるDIを介してアクセスされるシートのインスタンスが1つ必要です。スプリング依存性注入オブジェクトプール
これはSpringで可能かどうかを考えていますか?
スプリングブートコンテナで計算を行うオブジェクトがあります。それを「シート」と呼ぶことができます。アプリケーションの起動時に、10枚のシートをインスタンス化する必要があります。計算を開始するたびに、余分なスレッドで実行されるDIを介してアクセスされるシートのインスタンスが1つ必要です。スプリング依存性注入オブジェクトプール
これはSpringで可能かどうかを考えていますか?
これは次のようにして実現できます。Sheet
クラスがあるとしましょう。私はjava8を使ってコードをコンパイルしました。
Sheet.java
@Component("sheet")
@Scope(value = "prototype")
public class Sheet {
// Implementation goes here
}
今、あなたはSheetPool
ではないことに注意
public class SheetPool {
private List<Sheet> sheets;
public List<Sheet> getSheets() {
return sheets;
}
public Sheet getObject() {
int index = ThreadLocalRandom.current().nextInt(sheets.size());
return sheets.get(index);
}
}
SheetPool.javaSheet
の10個のインスタンスを保持する第2クラスSheetPool
が必要Springコンポーネントこれは単なるJavaクラスです。
@Configuration
public class ApplicationConfig {
@Autowired
ApplicationContext applicationContext;
@Bean
public SheetPool sheetPool() {
SheetPool pool = new SheetPool();
IntStream.range(0, 10).forEach(e -> {
pool.getSheets().add((Sheet) applicationContext.getBean("sheet"));
});
return pool;
}
ApplicationConfig.java}
Sheet
の10インスタンスとSpringPool
オブジェクトを作成するの世話をする設定クラスは、第三のクラスが必要アプリケーションが起動すると、SheetPool
オブジェクトは、シートの10の異なるインスタンスで作成されます。Sheet
オブジェクトにアクセスするには次のコードを使用します。
@Autowired
SheetPool sheetPool;
Sheet sheetObj = sheetPool.getObject();
通常のプールを使用できませんか? https://commons.apache.org/proper/commons-pool/のように? –
カスタムスプリングBeanを作成するhttps://stackoverflow.com/a/15773000/6743203 –