jax-rs rest service调用属性文件

时间:2016-11-21 15:39:00

标签: java web-services rest properties-file

上下文

我按照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内吗?我应该在哪些项目中放置属性文件?

2 个答案:

答案 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);
    }

}