我按照SO answer来创建和加载属性文件。
我的后端代码分为4个项目(服务,业务,DAO,模型)
服务
@Path("/users")
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUsers() {
return UserBusiness.getUsers();
}
商家
public List<User> getUsers(){
return _userDao.findAll();
}
DAO
public List<User> getUsers(){
try{
String query = "";
PreparedStatement ps = null;
//Query to DB here
}catch(SQLException e){
}
}
模型
public class User{
private int id;
private String username;
private String password;
private String fullName;
}
我的属性文件存储在包Services
下的com.resources
项目中,此项目中ApplicationConfig
包内的类com.service
包含此
public static final String PROPERTIES_FILE = "config.properties";
public static Properties properties = new Properties();
private Properties readProperties() {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(PROPERTIES_FILE);
if (inputStream != null) {
try {
properties.load(inputStream);
} catch (IOException e) {
logger.severe(e.getMessage());
}
}
return properties;
}
我的Services
项目包含项目Models
作为依赖项。
我需要检索DAO
项目中的属性值(也许在其他项目中也是如此)。我无法将项目Services
添加到我的DAO
项目中,因为它会添加循环依赖项。因此,我无法联系到ApplicationConfig.properties.getProperty("myprop")
。
如何使用属性文件?我应该让readProperties()
在ApplicationConfig
内吗?我应该在哪些项目中放置属性文件?
答案 0 :(得分:1)
理想情况下,您的DAO项目不应该依赖于与服务项目相同的文件进行配置。您有两个选择:
将您在Service项目中的所有配置加载到一个类及其中。在这种情况下,您将得到一个包含所有项目配置的大配置文件。
在单独项目中的util类中的静态方法中重用配置文件加载器代码。每个项目现在都可以拥有自己的配置文件,并依赖于util项目来加载配置文件并阅读它。
答案 1 :(得分:0)
我在DAO
项目中使用Singleton做到了。我将为每个项目提供1 config.properties
以下的课程
public class PropertyHandler {
private final Logger logger = Logger.getLogger(PropertyHandler.class.getName());
private static PropertyHandler instance = null;
private Properties props = null;
private PropertyHandler() {
try {
props = new Properties();
InputStream in = PropertyHandler.class.getResourceAsStream("config.properties");
props.load(in);
in.close();
} catch (Exception e) {
logger.log(Level.SEVERE, "Error when loading DAO properties file\n***\n{0}", e.getMessage());
}
}
public static synchronized PropertyHandler getInstance() {
if (instance == null) {
instance = new PropertyHandler();
}
return instance;
}
public String getValue(String propKey) {
return this.props.getProperty(propKey);
}
}