希赛考试网
首页 > 软考 > 网络工程师

java配置文件properties文件中

希赛网 2024-04-25 11:53:56

Java 配置文件 properties 文件中

Java 开发中,properties 文件是常见的配置文件格式之一,Java 也提供了对 properties 文件的解析和使用的 API,本文将介绍 Java 中如何解析 properties 文件,以及在实际开发中的应用。

1. 什么是 properties 文件

properties 文件是一种基于文本格式的配置文件,以 key-value 的方式存储配置信息,其中 key 和 value 之间使用等号(=)或冒号(:)进行分隔,key 和 value 之间的空格会被忽略。properties 文件通常以 .properties 后缀名保存在文件系统中。

一个样例的 properties 文件内容如下:

```

# 数据库配置

database.url=jdbc:mysql://localhost:3306/mydb

database.username=root

database.password=123456

# 其他配置

app.name=My Application

app.version=1.0

```

2. 如何解析 properties 文件

Java 中提供了三种方式来解析 properties 文件,分别是:

- Properties 类

- ResourceBundle 类

- Apache Commons Configuration

2.1 Properties 类

Properties 类是 Java 标准库中提供的解析 properties 文件的 API,学习成本较低,使用也很方便,以下为它的基本使用步骤。

示例代码:

```java

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Properties;

public class PropertiesTest {

public static void main(String[] args) throws IOException {

FileInputStream fis = new FileInputStream("config.properties");

Properties props = new Properties();

props.load(fis);

String url = props.getProperty("database.url");

String username = props.getProperty("database.username");

String password = props.getProperty("database.password");

String appName = props.getProperty("app.name");

String appVersion = props.getProperty("app.version");

}

}

```

2.2 ResourceBundle 类

ResourceBundle 类也是 Java 标准库中提供的解析 properties 文件的 API,主要用于国际化和本地化,可以根据语言环境自动加载对应的配置文件。

示例代码:

```java

import java.util.ResourceBundle;

public class ResourceBundleTest {

public static void main(String[] args) {

ResourceBundle rb = ResourceBundle.getBundle("config");

String url = rb.getString("database.url");

String username = rb.getString("database.username");

String password = rb.getString("database.password");

String appName = rb.getString("app.name");

String appVersion = rb.getString("app.version");

}

}

```

2.3 Apache Commons Configuration

Apache Commons Configuration 是一个第三方的常用配置文件解析库,除了解析 properties 文件外,还支持其他多种格式的配置文件。相对于 Properties 类和 ResourceBundle 类,它提供的功能更加强大,可以很方便地实现属性的读写、监听、合并等功能。

示例代码:

```java

import java.io.File;

import org.apache.commons.configuration2.PropertiesConfiguration;

public class CommonsConfigurationTest {

public static void main(String[] args) throws Exception {

PropertiesConfiguration config = new PropertiesConfiguration();

config.setFile(new File("config.properties"));

config.load();

String url = config.getString("database.url");

String username = config.getString("database.username");

String password = config.getString("database.password");

String appName = config.getString("app.name");

String appVersion = config.getString("app.version");

}

}

```

3. properties 文件的应用

在实际开发中,我们经常需要使用 properties 文件来存储配置信息,常见的应用场景包括:

3.1 数据库连接池配置

在 Web 开发中,数据库连接池是一个非常重要的应用,多个线程需要共享数据库连接,连接池的配置信息可以存储在 properties 文件中,具体实现参考以下代码。

示例代码:

```java

import java.io.FileInputStream;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.Properties;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.TimeUnit;

public class ConnectionPool {

private static String url;

private static String username;

private static String password;

private static int initialSize;

private static int maxSize;

private static int maxWait;

private static BlockingQueue pool;

static {

try (FileInputStream fis = new FileInputStream("config.properties")) {

Properties props = new Properties();

props.load(fis);

url = props.getProperty("database.url");

username = props.getProperty("database.username");

password = props.getProperty("database.password");

initialSize = Integer.parseInt(props.getProperty("pool.initial.size"));

maxSize = Integer.parseInt(props.getProperty("pool.max.size"));

maxWait = Integer.parseInt(props.getProperty("pool.max.wait"));

pool = new ArrayBlockingQueue<>(maxSize);

for (int i = 0; i < initialSize; i++) {

pool.offer(createConnection());

}

} catch (IOException | SQLException | ClassNotFoundException e) {

throw new RuntimeException(e);

}

}

private static Connection createConnection() throws ClassNotFoundException, SQLException {

Class.forName("com.mysql.jdbc.Driver");

return DriverManager.getConnection(url, username, password);

}

public static Connection getConnection() throws InterruptedException, SQLException {

Connection connection = pool.poll(maxWait, TimeUnit.MILLISECONDS);

if (connection == null) {

connection = createConnection();

}

return connection;

}

public static void releaseConnection(Connection connection) throws SQLException {

if (pool.size() < maxSize) {

pool.offer(connection);

} else {

connection.close();

}

}

}

```

3.2 配置管理工具

当系统需要经常更新配置信息时,例如系统开关、超时时间、阈值等等,我们可以通过定时读取 properties 文件的方式来实现配置信息的动态更新。这样在不重启系统的情况下,就可以实现系统配置的变更。

示例代码:

```java

import java.io.FileInputStream;

import java.util.Properties;

public class ConfigManager {

private static final String CONFIG_FILE = "config.properties";

private static ConfigManager instance = new ConfigManager();

private Properties properties;

private ConfigManager() {

try (FileInputStream fis = new FileInputStream(CONFIG_FILE)) {

properties = new Properties();

properties.load(fis);

} catch (Exception e) {

throw new RuntimeException("Unable to load configuration file " + CONFIG_FILE, e);

}

}

public static ConfigManager getInstance() {

return instance;

}

public String getString(String key) {

return properties.getProperty(key);

}

public int getInt(String key) {

String value = properties.getProperty(key);

return Integer.parseInt(value);

}

}

```

4. 结论

本文介绍了 properties 文件的定义以及 Java 中三种解析 properties 文件的方式,以及在实际开发中的应用。

扫码咨询 领取资料


软考.png


网络工程师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
网络工程师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件