springbootUtil クラスを作成して springboot コンテキストを取得し、springboot コンテキストで Bean を取得し、Bean で特定のビジネス ロジックを実行します。
SpringBootUtil.java
package springBootPlugin;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringBootUtil implements ApplicationContextAware{
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(SpringBootUtil.applicationContext == null) {
SpringBootUtil.applicationContext = applicationContext;
}
}
//アプリケーションコンテキストの取得
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//Bean を名前で取得します。
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
//クラスごとにBeanを取得します。
public static <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
//指定された Bean を名前と Clazz で返します。
public static <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name, clazz);
}
}
あらゆるビジネス ロジックを処理できる単純なスレッド クラスを作成する。
ProjectRealTask.java
package springBootPlugin;
import org.springframework.stereotype.Component;
@Component
public class ProjectRealTask implements Runnable {
@Override
public void run() {
System.out.println("test ProjectRealTask");
}
}
メインの呼び出しクラスを作成し、呼び出しクラスの springbootUtil で Bean を取得し、Bean 内でビジネス ロジックを実行することで、ビジネス ロジックのプラグイン管理を実現します。
ProjectThread.java
package springBootPlugin;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
@Component
public class ProjectThread {
//ここでは、いくつかの Bean、サードパーティのビジネス ロジック、またはプラグインを呼び出す必要があります。
public void runThreadTaskLogic(){
//スレッドプールを作成する
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(10);
taskExecutor.setMaxPoolSize(10);
taskExecutor.setQueueCapacity(100);
taskExecutor.setThreadNamePrefix("TestExecute_");
taskExecutor.initialize();
//クラス名でBeanを取得します
ProjectRealTask realTask = SpringBootUtil.getBean(ProjectRealTask.class);
//具体的な Bean の操作
taskExecutor.submit(realTask);
}
}
この方法は、マルチタスクおよびマルチスレッド処理のビジネス ロジック シナリオに非常に適しており、Bean の管理がより柔軟で便利になります。