4 回答

TA貢獻1793條經(jīng)驗 獲得超6個贊
正如所指出的,設(shè)置 ehcache 需要一些時間,并且不能完全與@PostConstruct. 在這種情況下,使用ApplicationStartedEvent加載緩存。
GitHub 倉庫:spring-ehcache-demo
@Service
class CodeCategoryService{
@EventListener(classes = ApplicationStartedEvent.class )
public void listenToStart(ApplicationStartedEvent event) {
this.repo.findByCodeValue("100");
}
}
interface CodeCategoryRepository extends JpaRepository<CodeCategory, Long>{
@Cacheable(value = "codeValues")
List<CodeCategory> findByCodeValue(String code);
}
注意:其他人指出的方法有多種。您可以根據(jù)自己的需要進行選擇。

TA貢獻1797條經(jīng)驗 獲得超4個贊
我的方法是定義一個通用的緩存處理程序
@FunctionalInterface
public interface GenericCacheHandler {
List<CodeCategory> findAll();
}
及其實現(xiàn)如下
@Component
@EnableScheduling // Important
public class GenericCacheHandlerImpl implements GenericCacheHandler {
@Autowired
private CodeRepository codeRepo;
private List<CodeCategory> codes = new ArrayList<>();
@PostConstruct
private void intializeBudgetState() {
List<CodeCategory> codeList = codeRepo.findAll();
// Any customization goes here
codes = codeList;
}
@Override
public List<CodeCategory> getCodes() {
return codes;
}
}
在服務(wù)層調(diào)用如下
@Service
public class CodeServiceImpl implements CodeService {
@Autowired
private GenericCacheHandler genericCacheHandler;
@Override
public CodeDTO anyMethod() {
return genericCacheHandler.getCodes();
}
}

TA貢獻1875條經(jīng)驗 獲得超3個贊
使用CommandLineRunner接口?;旧希梢詣?chuàng)建一個 Spring @Component 并實現(xiàn) CommandLineRunner 接口。您將不得不重寫它的運行方法。run 方法將在應(yīng)用程序啟動時調(diào)用。
@Component
public class DatabaseLoader implements
CommandLineRunner {
@override
Public void run(.... string){
// Any code here gets called at the start of the app.
}}
這種方法主要用于使用一些初始數(shù)據(jù)引導(dǎo)應(yīng)用程序。

TA貢獻1744條經(jīng)驗 獲得超4個贊
使用二級休眠緩存來緩存所有需要的數(shù)據(jù)庫查詢。
為了在應(yīng)用程序啟動時緩存,我們可以在任何服務(wù)類中使用@PostContruct。
語法將是:-
@Service
public class anyService{
@PostConstruct
public void init(){
//call any method
}
}
添加回答
舉報