我们经常在项目开发中遇到项目数据初始化的问题,例如一些超管,管理员账号;或者地图包,电话号码包,之类的东西。放到到一个json文件里面(大的数据字典包可以放到搜索引擎里面,改情况本文不做讨论),然后项目启动时候就可以读取,便于我们使用
- initData.json 文件
{
"appcInitData":{
"coinTaskInitLogo":{
"newMemberGuide" : "https,://123.cn/123/saas_123.png"
}
}
}
- InitDataProperties.java (Json 文件映射类)
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class InitDataProperties {
private AppcInitData AppcInitData;
@Data
public class AppcInitData {
private CoinTaskInitLogo coinTaskInitLogo;
@Data
public class CoinTaskInitLogo {
private String newMemberGuide;
}
}
}
- InitProjectData.java(数据读取接口)
public interface InitProjectData {
InitDataProperties PrepareAppcInitData();
}
- InitProjectDataImpl.java (实现类)
json文件放在了resource/doc 文件目录下
@Component
public class InitProjectDataImpl implements InitProjectData{
@Override
public InitDataProperties PrepareAppcInitData() {
String fileSeparator = File.separator;
try {
File file = new File(this.getClass().getResource(fileSeparator + "doc" + fileSeparator + "initData.json").getFile());
ObjectMapper objectMapper = new ObjectMapper();
InitDataProperties initDataProperties = objectMapper.readValue(file, InitDataProperties.class);
System.out.println(initDataProperties.toString());
return initDataProperties;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
- 在PostConstruct 项目初始化时候,调用并初始化
@Autowired
InitProjectData InitProjectData;
@PostConstruct
public void init(){
InitProjectData.PrepareAppcInitData();
}
测试
参考资料 & 致谢
[1] Spring.io