일부 JSON 파일을 Spring Boot 응용 프로그램에 로드하는 가장 좋은 방법
Rest 웹 서비스 응용 프로그램을 만들려고 하는데, 응용 프로그램 시작 시 매개 변수(application.ymla priori)로 전달된 폴더에 존재하는 모든 JSON 파일을 로드하여 나중에 웹 서비스 방식으로 콩 목록으로 사용해야 합니다(모든 JSON 파일은 콩에 해당).
요구 사항을 자세히 설명하는 샘플:
application.yml:
json.config.folder: /opt/my_application/json_configs
내 응용 프로그램.java:
package com.company;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
다음 구조를 가진 JSON 파일:
{
"key":"YYYYY",
"operator_list":[
{
"name":"operator1",
"configs":{
"id":"XXXXX1",
"path":"xxxx2"
}
},
{
"name":"operator2",
"configs":{
"id":"XXXXX1",
"passphrase":"xxxx2",
"user_id":"XXXX3",
"password":"XXXXX"
}
},
{
"name":"operator3",
"configs":{
"user_id":"XXXXX1"
}
}
]
}
RestAPI.java
@RestController
@RequestMapping("/my_app_url")
@PropertySource(value={"classpath:application.yml"})
public class RestAPI {
//Some fields
....
//Some methods
....
//Method that return operator list of a given context (correspond to the field "key" of the json file)
@RequestMapping("/getOperatorList")
public List<Operator> getOperatorList(@RequestParam(value = "context", defaultValue = "YYYYY") String context) throws Exception{
List<Operator> result = null;
//Here, i need to loop the objects , that are supposed to be initialized during application startup
//(but i I do not know yet how to do it) with data from JSON files
//to find the one that correspond to the context in parameter and return its operator list
return result;
}
}
JSON 파일 infosa priori를 포함하는 ContextOperatorBean.java:
package com.company.models;
import java.util.List;
public class ContextOperatorBean {
String key;
List<Operator> operator_list;
public ContextOperatorBean() {
}
public ContextOperatorBean(String key, List<PaymentMethod> operator_list) {
this.key = key;
this.operator_list = operator_list;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public List<Operator> getOperator_list() {
return operator_list;
}
public void setOperator_list(List<Operator> operator_list) {
this.operator_list = operator_list;
}
}
그리고 모든 연산자 정보를 포함하는 Operator.java라는 다른 클래스가 있습니다.
다음을 초기화하는 방법이 있습니까?ContextOperatorBean
응용 프로그램 시작 시 모든 JSON 파일의 정보를 포함하고 내 웹 서비스 메서드(RestAPI.java 클래스)에서 사용하는 개체 목록?
다음과 같은 혁신적인 구현이 "최고"라는 기준을 충족하는지는 모르겠지만, 이러한 책임을 다루는 새로운 서비스를 만들 수 있습니다. 예를 들어, 다음과 같습니다.
@Service
public class OperatorsService {
@Value("${json.config.folder}")
String jsonConfigFolder;
List<ContextOperatorBean> operators = new ArrayList<>();
@PostConstruct
public void init() throws IOException {
ObjectMapper jsonMapper = new ObjectMapper();
for (File jsonFile : getFilesInFolder(jsonConfigFolder)) {
// deserialize contents of each file into an object of type
ContextOperatorBean operator = jsonMapper.readValue(jsonFile, new TypeReference<List<ContextOperatorBean>>() {});
operators.add(operator);
}
}
public List<ContextOperatorBean> getMatchingOperators(String context) {
return operators.stream().filter(operator -> checkIfMatches(operator, context)).collect(Collectors.toList());
}
private boolean checkIfMatches(ContextOperatorBean operator, String context) {
// TODO implement
return false;
}
private File[] getFilesInFolder(String path) {
// TODO implement
return null;
}
}
참고: 처리 실패 또는 예상치 못한 조건과 일부 구현 세부 정보는 생략됩니다.
그리고나서@Autowire
당신의 컨트롤러에서 그리고 통화.getMatchingOperators()
일치하는 항목만 필터링합니다.
언급URL : https://stackoverflow.com/questions/34277392/best-way-to-load-some-json-files-into-a-spring-boot-application
'programing' 카테고리의 다른 글
유성 업서트 사용 방법 (0) | 2023.07.05 |
---|---|
일반 개체를 mongoose 문서에 캐스팅 (0) | 2023.07.05 |
특정 IP 범위의 입력 IP 하한을 확인하는 방법 (0) | 2023.07.05 |
MongoDB에서 _id 유형을 정수로 변경하는 것이 나쁜가요? (0) | 2023.07.05 |
시스템을 찾을 수 없습니다.거미줄. (0) | 2023.07.05 |