Spring+Mybatisマルチデータソース構成(3)-SpringがPropertiesファイルの情報を取得する方法


厳密には、このブログで述べた内容はこのシリーズとは必要な関係はありません.このブログのテーマはspringを使用してpropertiesファイルの情報を取得する方法です.本博文で採用した用例はすべてこのシリーズと関係があるので、ここで話します.
springの構成(アプリケーションContext.xml):(具体的な場所は本シリーズの前の2つのブログを参照)により、springが現在のclasspathのconfigを自動的にロードするように構成する.propertiesファイル、このconfig.propertiesの内容は以下の通りです.
# oracle configuration
 ora_driver=oracle.jdbc.driver.OracleDriver
 ora_url=jdbc:oracle:thin:@10.10.195.185:1521:sp5000
 ora_username=shr
 ora_password=shr

 #mysql configuration
 mysql_driver=com.mysql.jdbc.Driver
 mysql_url=jdbc:mysql://10.10.193.111:3306/sp5000?useUnicode=true&characterEncoding=UTF-8
 mysql_username=shr
 mysql_password=shr

 dataSource=oracle

アプリケーションContextの場合xmlのデータソースは次のように構成されています.
	<bean id="mysql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" 	value="${mysql_driver}"/>
		<property name="url" 		value="${mysql_url}"/>
		<property name="username" 	value="${mysql_username}"/>
		<property name="password" 	value="${mysql_password}"/>
	</bean>
	<bean id="oracle" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" 	value="${ora_driver}"/>
		<property name="url" 		value="${ora_url}"/>
		<property name="username" 	value="${ora_username}"/>
		<property name="password" 	value="${ora_password}"/>
	</bean>
には、次のように表示されます.
${mysql_driver}これはconfigに自動的に読み込むことができる.propertiesファイルの対応するフィールドの値.
ではjavaプログラムではどのように取得しますか?次のテスト例を見てみましょう.
package com.shr.service.userManage;

import java.util.List;

import javax.inject.Inject;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import com.shr.dao.model.userManage.UserListInfo;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:WebContent/WEB-INF/applicationContext.xml")
@Transactional
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=false)
public class UserManageServiceTest {

	@Inject
	private UserManageService userManageService;
	
	@Value("${ora_driver}")
	private String driver;
	@Value("${ora_url}")
	private String url;
	@Value("${ora_username}")
	private String username;
	@Value("${ora_password}")
	private String password;
	
	@Test
	public void testConfigProperties()
	{
		System.out.println(driver);
		System.out.println(url);
		System.out.println(username);
		System.out.println(password);
	}
}

実行結果:
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@10.10.195.185:1521:sp5000
shr
shr

注記@Value("${ora_driver}")を使用することでconfigを取得できることが上記のコードでわかる.propertiesの値.
これらは比較的簡単な構成であり、構成可能な複雑な点である.これを次のように置き換えることができます.
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:*.properties</value>
            </list>
        </property>
    </bean>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
        <property name="properties" ref="configProperties" />
    </bean>

このように同様に@Value("${ora_driver}")のように値を取得してもよいし、@Value("#{configProperties['ora_driver']}")のように値を取得してもよいし、後者の方法がやや複雑であることが分かるので、前者を推奨する.