Как прочитать значения из файла свойств в JavaBean (класс домена)? - PullRequest
0 голосов
/ 19 января 2011

У меня есть класс домена, и я хочу прочитать значения из файла свойств (здесь не работает автопроводка messageSource), так что есть идеи? Я использую весну, спящий и вот пример:

package com.myapp.domain;

import java.io.Serializable;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


@SuppressWarnings("serial")
@Entity
@Table(name = "domain")
public class MyDomain implements Serializable {

    private long entityId;
    private String domain="some_hardcoded_value" // need to read it from a property file;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    @Basic(fetch = FetchType.EAGER)
    public long getEntityId() {
        return entityId;
    }

    public void setEntityId(long entityId) {
        this.entityId = entityId;
    }

    public void setDomain(String domain) {
        this.domain = domain;
    }

    @Column(name = "domain")
    public String getDomain() {
        return domain;
    }

}

Ответы [ 3 ]

3 голосов
/ 19 января 2011

Я все еще не понимаю вопроса, но я предполагаю, что вы хотите установить свойства bean-компонента из файла свойств.

В других ответах показано, как получить объект Properties из файла .properties (я покажу дополнительные способы ниже), я покажу вам, как связать свойства из него с использованием интерфейса BeanWrapper Spring:

public static void wireBeanFromProperties(Object bean, Properties props){

    BeanWrapper wrapper = new BeanWrapperImpl(bean);
    for(Entry<Object, Object> entry:props.entrySet()){
        String propertyName = entry.getKey().toString();
        if(wrapper.isWritableProperty(propertyName)){
            wrapper.setPropertyValue(propertyName, entry.getValue());
        }
    }

}

Или, если вы точно знаете, что все свойства из файла свойств могут быть сопоставлены со свойствами этого компонента класса:

public static void wireBeanFromProperties(final Object bean,
    final Properties props){
    final BeanWrapper wrapper = new BeanWrapperImpl(bean);
    // will throw an exception if the Properties object
    // contains any unknown keys
    wrapper.setPropertyValues(props);
}

Ссылка: 5.4. Бобовые манипуляции и BeanWrapper


На самом деле, специфичные для Spring способы загрузки ресурсов из пути к классам используют механизм Resource

InputStream str = new ClassPathResource("classpath:some.properties")
                      .getInputStream();

Приятной особенностью является то, что вы можете легко соединить InputStreams и Resources из XML, используя синтаксис classpath::

Java-код

private InputStream stream;
private Resource resource;
public void setStream(InputStream stream){
    this.stream = stream;
}
public void setResource(Resource resource){
    this.resource = resource;
}

свойство проводки:

<bean class="MyClass">
    <property name="stream" value="classpath:file1.properties" />
    <property name="resource" value="classpath:file2.properties" />
</bean>

Если вы просто хотите инициализировать статическое конечное поле, вот как это сделать:

private static final String DOMAIN;
static{
    InputStream inputStream=null;
    try{
        inputStream = new ClassPathResource("classpath:some.properties")
                          .getInputStream();
        Properties props = new Properties();
        props.load(inputStream);
        String key = "your.property";
        if(!props.containsKey(key))
            throw new IllegalStateException("Property not found");
        DOMAIN= props.getProperty(key);
    } catch(IOException e){
        throw new IllegalStateException(e);
    }finally{
        // apache commons / IO
        IOUtils.closeQuietly(inputStream);
    }
}
0 голосов
/ 19 января 2011

Добавление к коду Ансари

Properties p = new Properties();
p.load (Thread.currentThread().getContextClassLoader().
         getResourceAsStream("some.properties"));

p.list(System.out);  // or p.get("name")   --> name=value.

После поиска в интернете я нашел ниже

<!--Bean to load properties file -->  

<bean id="placeholderConfig" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    
<property name="location" value="classpath:config.properties">  
<!--reads config.properties file-->  

Пожалуйста, прочитайте эту статью http://www.zparacha.com/how-to-read-properties-file-in-spring/

0 голосов
/ 19 января 2011

Помимо всего, вы всегда можете сделать,

Thread.currentThread.getContextClassLoader().getResourceAsStream("some.properties")

Но мне все еще интересно, что вы хотите прочитать в вашем Entity из файла свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...