用properties.load()时总是要求改level为6,很不舒服 学习了用别的方式读配置文件
案例如下:
一、需要的依赖有:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.5</version>
</dependency>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.log</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.Test</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
二、前提工作
resources里建 config和generator包 config里放配置文件,因为test和生产环境不一样,所以用这种方式 test.properties
cloud.mysql.jdbc.driver=com.mysql.cj.jdbc.Driver
和config同级中放config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<properties resource="config/test.properties"></properties>
</configuration>
三、configuration工具
constant包中放configuration 代码如下
package constant;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
public class Configuration extends Properties {
public static final Logger log = LogManager.getLogger(Configuration.class);
private static final long serialVersionUID = 50440463580273222L;
private static Configuration instance = null;
public Configuration() {
InputStream in;
try {
in = this.getClass().getResourceAsStream("/"+ read());
this.load(in);
in.close();
} catch (IOException e) {
log.error(e);
}
}
public static synchronized Configuration getInstance() {
if (instance == null) {
instance = new Configuration();
}
return instance;
}
public String read() {
String prefix = null;
SAXBuilder builder = new SAXBuilder();
InputStream file = this.getClass().getResourceAsStream("/config.xml");
try {
Document doc = builder.build(file);
Element root = doc.getRootElement();
List<Element> list = root.getChildren();
for (Element e : list) {
if (null != e.getAttribute("resource")) {
prefix = e.getAttribute("resource").getValue();
}
}
} catch (Exception e) {
log.error(e);
}
return prefix;
}
@Override
public String getProperty(String key, String defaultValue) {
String val = getProperty(key);
return (val == null || val.isEmpty()) ? defaultValue : val;
}
public String getString(String name, String defaultValue) {
return this.getProperty(name, defaultValue);
}
public int getInt(String name, int defaultValue) {
String val = this.getProperty(name);
return (val == null || val.isEmpty()) ? defaultValue : Integer.parseInt(val);
}
public long getLong(String name, long defaultValue) {
String val = this.getProperty(name);
return (val == null || val.isEmpty()) ? defaultValue : Integer.parseInt(val);
}
public float getFloat(String name, float defaultValue) {
String val = this.getProperty(name);
return (val == null || val.isEmpty()) ? defaultValue : Float.parseFloat(val);
}
public double getDouble(String name, double defaultValue) {
String val = this.getProperty(name);
return (val == null || val.isEmpty()) ? defaultValue : Double.parseDouble(val);
}
public byte getByte(String name, byte defaultValue) {
String val = this.getProperty(name);
return (val == null || val.isEmpty()) ? defaultValue : Byte.parseByte(val);
}
}
四、测试
写好了 最后测试一下
package com;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
public class Test {
public static final Logger log = LogManager.getLogger(Test.class);
public static constant.Configuration config = constant.Configuration.getInstance();
public static void main(String[] args) {
String driverClassName = config.getString("cloud.mysql.jdbc.driver", "");
System.out.println(driverClassName);
}
}
这样比直接用properties确实好用多了
|