maven工程读取resource下配置文件
在maven工程中,我们会将配置文件放到,src/main/resources 下面,例如
我们需要确认resource 下的文件 编译之后存放的位置
它编译的路径直接位于classes下面,这个路径其实就是classPath的路径,所以,在resources 根目录下的配置文件其实就是 classPath的路径
1 public static void main(String[] args) throws ParserConfigurationException, Exception{ 2 ClassLoader classLoader = TestDom.class.getClassLoader(); 3 URL resource = classLoader.getResource("test.xml"); 4 String path = resource.getPath(); 5 System.out.println(path); 6 InputStream resourceAsStream = classLoader.getResourceAsStream("test.xml");
这样我们就可以直接拿到路径,调用 getResourceAsStream 方法 可以直接拿到目标文件的输入流
在Maven项目的开发中,当需要读取src/下的配置文件时,该怎么做?
我们假设Resources下有一个文件名为kafka.properties的配置文件(为什么用kafka.properties,因为这是在做kafka项目的时候碰到的问题,在网上查到了不少信息,索性当个搬运工,再根据自己的理解整理一下)
1.在java类中读取
若配置文件不在src/main/resources目录下,可以直接使用
-
Properties prop =
new properties();
-
prop.load(
new InputStream(
“kafka.properties”));
当配置文件放在src/main/resources的目录下时,只能使用Class.getResourceAsStream()方法来加载
-
Properties prop =
new properties();
-
prop.load(
this.getClass().getResourceAsStream(
“/kafka.properties”));
此时,getResourceAsStream(String name)方法中参数路径的写法:
1).若写成”kafka.properties”,则是去当前类的class文件同一目录下找(但是显然在正常项目不会有人将配置文件放在这种位置)。
2).若写成”/kafka.properties”,则是去整个项目的classes目录下去找,即target/classes
2.在spring框架的xml文件中读取
首先我们先随便写个配置文件kafka.properties
- kafka.topic=topic
- serializer.class=kafka.serializer.StringEncoder
- key.serializer.class=kafka.serializer.StringEncoder
以下就有两种方法来调用
1).首先可以在spring的bean中配置
-
<
bean
id=
“propertyConfigurer”
class=
“org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”
>
-
<
property
name=
“locations”
>
-
<
list
>
-
<
span
style=
“white-space:pre;”
>
</
span
>
<
value
>/kafka.properties
</
value
>
-
</
list
>
-
</
property
>
-
</
bean
>
这里还可以在list标签中配置多个value,这样就可以在bean中读取一个甚至多个配置文件。
-
<
bean
id=
“kafkaService”
class=
“com.wws.service.impl.KafkaServiceImpl”
>
-
<!– <property name=”topic”><value>topic</value></property> –>
-
<
property
name=
“topic”
>
<
value
>${kafka.topic}
</
value
>
</
property
>
-
</
bean
>
这样就可以在后面的bean中成功调用配置文件中的参数,以上被注释的那段property和被注释掉的那行是同样效果
2).或者也可以使用如下方法
-
<
context:property-placeholder
location=
“classpath:kafka.properties”
/>
直接在spring配置文件中配置context:property-placeholder,有多个配置文件可以用逗号隔开,例如
-
<
context:property-placeholder
location=
“classpath:kafka.properties,classpath:jdbc.properties”
/>
调用的方法跟1).中一样,这里就不重复了