web-dev-qa-db-ja.com

Springプロジェクトでプロパティファイルを読む方法は?

この質問を投稿する前に、Springプロジェクト(Webベースのプロジェクトではありません)からプロパティを取得するためにgoogleします。誰もがapplication-context.xmlについて話し、次のような構成を持っているので、私は混乱しています

ただし、私は通常のJava Springを使用したプロジェクト(Webアプリなどはありません)に取り組んでいます。しかし、プロパティファイルから共通のプロパティを取得し、 Javaファイル。Spring/ Springアノテーションを使用してこれを実現するにはどうすればよいですか?

プロジェクトの下でmyprops.propertiesファイルを構成する場所と、springを介して呼び出す方法

私の理解では、application-context.xmlはWebベースのプロジェクトでのみ使用されます。そうでない場合は、application-context.xmlを定義するweb.xmlがないため、このapplication-context.xmlをどのように構成する必要がありますか

14
Sriks

次のようなXMLベースのアプリケーションコンテキストを作成できます。

ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");

xmlファイルがクラスパスにある場合。または、ファイルシステム上のファイルを使用できます。

ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml");

詳細については、 Springリファレンスドキュメント を参照してください。また、正常なシャットダウンを保証するために shutdown hook を登録する必要があります。

 ctx.registerShutdownHook();

次に、 PropertyPlaceHolderConfigurer を使用して、「。properties」ファイルからプロパティを抽出し、Beanに注入できます。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:com/foo/jdbc.properties"/>
</bean>

<bean id="dataSource" destroy-method="close" class="org.Apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

最後に、注釈ベースの設定が必要な場合は、@ValueプロパティをBeanに注入するアノテーション:

@Component
public class SomeBean {

    @Value("${jdbc.url}") 
    private String jdbcUrl;
}
24
matsev

Spring 4以降、Spring @Configurationクラスで @ PropertySource アノテーションを使用できます。

@Configuration
@PropertySource("application.properties")
public class ApplicationConfig {

    // more config ...
}

クラスパスの外部に設定をしたい場合は、file:プレフィックスを使用できます:

@PropertySource("file:/path/to/application.properties")

または、環境変数を使用してファイルを定義できます

@PropertySource("file:${APP_PROPERTIES}")

ここで、APP_PROPERTIESは、プロパティファイルの場所の値を持つ環境変数です。 /path/to/application.properties

@PropertySource、その使用法、プロパティ値をオーバーライドする方法、オプションのプロパティソースを指定する方法の詳細については、ブログ投稿 Spring @PropertySource を参照してください。

6
matsev

Springを使用する必要はありません。プレーンJavaこのように読むことができます:

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName));
3
jediz

プロジェクトがアプリ全体でどのように使用されるかを理解できますか?プロジェクトがWebアプリのビルドパスとして使用され、プロジェクトの構成がスプリングアノテーションによって実現されている場合、_application.xml_ファイルを追加する方法について疑問に思われることは間違いありません。私の提案は、あなたのプロジェクトを使用する人を発表し、あなたに必要なものを伝え、あなたのコードに@Value("${valuename}")を追加するだけです。

0
Evan Hu