21

Spring 3.1の新しい@PropertySourceアノテーションを使用して、Environmentで複数のプロパティファイルにアクセスするにはどうすればよいですか?

現在私は持っています:

@Controller
@Configuration 
@PropertySource(
    name = "props",
    value = { "classpath:File1.properties", "classpath:File2.properties" })
public class TestDetailsController {


@Autowired
private Environment env;
/**
 * Simply selects the home view to render by returning its name.
 */
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {

    String file1Name = env.getProperty("file1.name","file1.name not found");
            String file2Name = env.getProperty("file2.name","file2.name not found");

            System.out.println("file 1: " + file1Name);
            System.out.println("file 2: " + file2Name);

    return "home";
}


結果はFile1.propertiesからの正しいファイル名ですが、 file2.name見つかりません。File2.propertiesにアクセスするにはどうすればよいですか?

4

3 に答える 3

62

Spring 4.xに移行できる場合、問題は新しい@PropertySourcesアノテーションで解決されています。

@PropertySources({
        @PropertySource("/file1.properties"),
        @PropertySource("/file2.properties")
})
于 2013-12-21T00:10:14.203 に答える
5

2 つの異なるアプローチがあります。1 つ目は、applicationContext.xml で PropertyPlaceHolder を使用する方法です 。beans-factory-placeholderconfigurer

<context:property-placeholder location="classpath*:META-INF/spring/properties/*.properties"/>

追加する名前空間はxmlns:context="http://www.springframework.org/schema/context"

コントローラーの文字列変数にキーを直接アクセスする場合は、次を使用します。

@Value("${some.key}")
private String valueOfThatKey;

2 番目のアプローチは、util:propertiesapplicationContext.xml で を使用することです。

<util:properties id="fileA" location="classpath:META-INF/properties/a.properties"/>
<util:properties id="fileB" location="classpath:META-INF/properties/b.properties"/>

xmlns:util="http://www.springframework.org/schema/util"名前空間schemaLocationsを使用します。http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd

次に、コントローラーで:

@Resource(name="fileA")
private Properties propertyA;

@Resource(name="fileB")
private Properties propertyB;

ファイルから値が必要な場合は、メソッドを使用してくださいgetProperty(String key)

于 2013-01-25T15:57:02.560 に答える