私は春を使っています。プロパティファイルから値を読み込む必要があります。これは内部プロパティファイルで、外部プロパティファイルではありません。プロパティファイルは以下のようになります。
some.properties ---file name. values are below.
abc = abc
def = dsd
ghi = weds
jil = sdd
私は伝統的な方法ではなくプロパティファイルからそれらの値を読む必要があります。それを達成する方法は? Spring 3.0に関する最新のアプローチはありますか?
コンテキストに合わせてPropertyPlaceholderを設定します。
<context:property-placeholder location="classpath*:my.properties"/>
それからあなたはあなたの豆の中のプロパティを参照します:
@Component
class MyClass {
@Value("${my.property.name}")
private String[] myValues;
}
編集:複数のカンマ区切り値でプロパティを解析するようにコードを更新しました。
my.property.name=aaa,bbb,ccc
それでもうまくいかない場合は、プロパティを使用してBeanを定義し、それを手動で挿入および処理できます。
<bean id="myProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath*:my.properties</value>
</list>
</property>
</bean>
そして豆:
@Component
class MyClass {
@Resource(name="myProperties")
private Properties myProperties;
@PostConstruct
public void init() {
// do whatever you need with properties
}
}
構成クラスで
@Configuration
@PropertySource("classpath:/com/myco/app.properties")
public class AppConfig {
@Autowired
Environment env;
@Bean
public TestBean testBean() {
TestBean testBean = new TestBean();
testBean.setName(env.getProperty("testbean.name"));
return testBean;
}
}
同じことを達成するためのさまざまな方法があります。下記は春によく使われる方法です。
PropertiesFactoryBeanを使う
などなど........................
ds.type
があなたのプロパティファイルのキーであると仮定します。
PropertyPlaceholderConfigurer
NAMEを使用する_
PropertyPlaceholderConfigurer
bean-を登録します。
<context:property-placeholder location="classpath:path/filename.properties"/>
または
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:path/filename.properties" ></property>
</bean>
または
@Configuration
public class SampleConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
//set locations as well.
}
}
PropertySourcesPlaceholderConfigurer
name__を登録した後は、次の値にアクセスできます。
@Value("${ds.type}")private String attr;
PropertySource
NAMEを使用する_
最新の春バージョンでは、PropertyPlaceHolderConfigurer
name__を@PropertySource
に登録する必要はありません。バージョンの互換性を理解するために良い リンク を見つけました。
@PropertySource("classpath:path/filename.properties")
@Component
public class BeanTester {
@Autowired Environment environment;
public void execute() {
String attr = this.environment.getProperty("ds.type");
}
}
ResourceBundleMessageSource
NAMEを使用する_
Beanの登録 -
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:path/filename.properties</value>
</list>
</property>
</bean>
アクセス値 -
((ApplicationContext)context).getMessage("ds.type", null, null);
または
@Component
public class BeanTester {
@Autowired MessageSource messageSource;
public void execute() {
String attr = this.messageSource.getMessage("ds.type", null, null);
}
}
PropertiesFactoryBean
NAMEを使用する_
Beanの登録 -
<bean id="properties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:path/filename.properties</value>
</list>
</property>
</bean>
Propertiesインスタンスをクラスに配線します。
@Component
public class BeanTester {
@Autowired Properties properties;
public void execute() {
String attr = properties.getProperty("ds.type");
}
}
これが私がそれがどのように働いていたかを理解するのに非常に助けになった追加の答えです: http://www.javacodegeeks.com/2013/07/spring-bean-and-propertyplaceholderconfigurer.html
beanFactoryPostProcessor Beanは、static修飾子を使用して宣言する必要があります。
@Configuration
@PropertySource("classpath:root/test.props")
public class SampleConfig {
@Value("${test.prop}")
private String attr;
@Bean
public SampleService sampleService() {
return new SampleService(attr);
}
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
@Valueを使わずに手動でプロパティファイルを読む必要がある場合
Lokesh Guptaによるよく書かれたページをありがとう。 ブログ
package utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
import Java.io.FileInputStream;
import Java.io.IOException;
import Java.io.InputStream;
import Java.util.Properties;
import Java.io.File;
public class Utils {
private static final Logger LOGGER = LoggerFactory.getLogger(Utils.class.getName());
public static Properties fetchProperties(){
Properties properties = new Properties();
try {
File file = ResourceUtils.getFile("classpath:application.properties");
InputStream in = new FileInputStream(file);
properties.load(in);
} catch (IOException e) {
LOGGER.error(e.getMessage());
}
return properties;
}
}
アプリケーションコンテキストにPropertyPlaceholderConfigurer Beanを配置し、そのlocationプロパティを設定する必要があります。
ここに詳細を見なさい: http://www.zparacha.com/how-to-read-properties-file-in-spring/
これを機能させるには、プロパティファイルを少し変更する必要があります。
それが役に立てば幸い。
別の方法は ResourceBundle を使うことです。基本的には '.properties'なしでその名前を使ってバンドルを取得します
private static final ResourceBundle resource = ResourceBundle.getBundle("config");
そして、あなたはこれを使って価値を回復します:
private final String prop = resource.getString("propName");
私はこのリンクを読むことをお勧めします https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html SpringBootのドキュメントにある外部設定の注入について。彼らはプロパティファイルから取得することについて話しただけでなく、YAMLやJSONファイルさえも話しました。参考になりました。私もあなたがそうすることを望みます。
[project structure]: http://i.stack.imgur.com/RAGX3.jpg
-------------------------------
package beans;
import Java.util.Properties;
import Java.util.Set;
public class PropertiesBeans {
private Properties properties;
public void setProperties(Properties properties) {
this.properties = properties;
}
public void getProperty(){
Set keys = properties.keySet();
for (Object key : keys) {
System.out.println(key+" : "+properties.getProperty(key.toString()));
}
}
}
----------------------------
package beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ap = new ClassPathXmlApplicationContext("resource/spring.xml");
PropertiesBeans p = (PropertiesBeans)ap.getBean("p");
p.getProperty();
}
}
----------------------------
- driver.properties
Driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/test
username = root
password = root
----------------------------
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<bean id="p" class="beans.PropertiesBeans">
<property name="properties">
<util:properties location="classpath:resource/driver.properties"/>
</property>
</bean>
</beans>