Ниже представлен класс контроллера, с помощью которого он вызывает метод класса Filemappingservice.
@RestController
public class CacheController implements Serializable{
private static final long serialVersionUID = 1L;
/** The Constant LOGINUSER. */
private static final String LOGINUSER = "loginUser";
@Autowired
private FileMappingServiceImpl fileMappingServiceImpl;
/**
* @param request
* @return
*/
@RequestMapping(value = "/getfilemappingdata/", method = RequestMethod.GET)
public String getFileMappingData(HttpServletRequest request) {
try {
LoginUser loginUser = (LoginUser) request.getSession().getAttribute(LOGINUSER);
String response = fileMappingServiceImpl.getPartNamesinCache(loginUser);
return response;
} catch (Exception e) {
e.printStackTrace();
return "error";
}
}
}
Ниже показан класс, в котором я использовал API и пытался сохранить результат в Ehcache.
@Component
public class FileMappingServiceImpl{
private static final String BEARER = "Bearer";
@Cacheable("filemappingdata")
public String getPartNamesinCache(LoginUser loginUser) {
Map<String, String> headers = new HashMap<>();
String accessToken = loginUser.getAccess_token();
headers.put(HttpHeaders.AUTHORIZATION, BEARER + " " + accessToken);
headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
String requestBody = {"requetbody"};
String resourceId = "URL";
String response = postResource(resourceId, null, headers,requestBody.toString());
System.out.println(response);
return response;
}
public String postResource(String resourceId,
MultivaluedMap<String, String> parameters,
Map<String, String> headers, String request) {
try {
ClientResponse response;
Client client = Client.create();
WebResource webResource = client.resource(resourceId);
// Set query parameter
if (parameters != null && !parameters.isEmpty()) {
webResource = webResource.queryParams(parameters);
}
WebResource.Builder webResourceBuilder = webResource
.header(HttpHeaders.AUTHORIZATION,
headers.get(HttpHeaders.AUTHORIZATION))
.header(HttpHeaders.CONTENT_TYPE,
headers.get(HttpHeaders.CONTENT_TYPE));
//.post(ClientResponse.class, request);
if(headers.get("User-Locale") != null){
webResourceBuilder = webResourceBuilder.header("User-Locale", headers.get("User-Locale"));
}
response = webResourceBuilder.post(ClientResponse.class, request);
System.out.println("postResource"+response);
return response.getEntity(String.class);
} catch (Exception e) {
return Response.Status.SERVICE_UNAVAILABLE.toString();
}
}
}
Ниже приведен файл конфигурации spring.
@EnableCaching
@Configuration
public class SpringConfig {
private static EhCacheManagerFactoryBean cacheManagerfactoryBean;
@Bean
public CacheManager cacheManager() {
return new EhCacheCacheManager(cacheMangerFactory().getObject());
}
@Bean
public EhCacheManagerFactoryBean cacheMangerFactory() {
System.out.println("inside chache manger factory");
cacheManagerfactoryBean = new EhCacheManagerFactoryBean();
cacheManagerfactoryBean.setConfigLocation(new ClassPathResource("com/test/data/web/init/ehcache.xml"));
cacheManagerfactoryBean.setShared(true);
return cacheManagerfactoryBean;
}
}
Ниже приведен ehcache. xml файл
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
monitoring="autodetect" dynamicConfig="true">
<diskStore path="java.io.tmpdir" />
<cache name="filemappingdata" maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000" eternal="false" diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300" timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU" transactionalMode="off">
<persistence strategy="localTempSwap" />
</cache>
</ehcache>
Он отлично работает нормально, если я просто верну стат c строка из getPartNamesinCache Метод.