Java属性配置梳理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 梳理常见的Java属性配置

以数据库连接为例,展示如何进行属性配置。

直接使用

JDBCUtil对数据库进行操作:

public class JDBCUtil {

    public static final String URL = "jdbc:mysql://localhost:3306/jdbctest";
    public static final String USER = "root";
    public static final String PASSWORD = "password";
    public static final String DRIVER = "com.mysql.cj.jdbc.Driver";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 1.加载驱动程序
            Class.forName(DRIVER);
            //2.获得数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
            //3.操作数据库
            stmt = conn.createStatement();
            //4.实现增删改查
            rs = stmt.executeQuery("SELECT * FROM user;");


            //如果有数据,rs.next()返回true
            while (rs.next()) {
                System.out.println("username= " + rs.getString("username") + ", password= "
                        + rs.getString("password") + ", name= " + rs.getString("name"));
            }

            stmt.close();
            conn.close();
        } catch (ClassNotFoundException ex1) {
            ex1.printStackTrace();
        } catch (SQLException ex2) {
            ex2.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException sqlEx) {
                    //
                }
                rs = null;
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException sqlEx) {
                        //
                    }
                    conn = null;
                    if (conn != null) {
                        try {
                            conn.close();
                        } catch (SQLException sqlEx) {
                            //
                        }
                        conn = null; //垃圾回收机制会更早地垃圾释放

                    }
                }
            }
        }
    }

其中,urlusernamepassworddriverClassName等数据库连接所需的参数属性直接在代码中写死,后续如果有变化,需要更改所有使用的地方。所以,现在需要把这些属性从代码中单独抽取到配置文件中。

属性读取

将属性抽取到datasource.properties文件中:

# 驱动的Java类名
mydatasource.driverClassName=com.mysql.cj.jdbc.Driver
#传递给JDBC驱动的用于建立连接的URL
mydatasource.url=jdbc:mysql://localhost:3306/jdbctest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
#用户名和密码
mydatasource.username=root
mydatasource.password=1234

代码中使用DataSource对象:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataSource {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

配置文件到对象的映射如下:

public class DataSourceFactory {
    public static DataSource getDataSource() throws IOException {
        InputStream inputStream = DataSourceFactory.class.getResourceAsStream("/datasource.properties");
        Properties properties = new Properties();
        properties.load(inputStream);

        DataSource dataSource = DataSource.builder()
                .driverClassName(properties.getProperty("mydatasource.driverClassName"))
                .url(properties.getProperty("mydatasource.url"))
                .username(properties.getProperty("mydatasource.username"))
                .password(properties.getProperty("mydatasource.password"))
                .build();
        return dataSource;
    }
}

然后我们的数据库操作代码就变成了:

public class JDBCUtil {

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            DataSource dataSource = DataSourceFactory.getDataSource();
            // 1.加载驱动程序
            Class.forName(dataSource.getUrl());

            //2.获得数据库连接
            conn = DriverManager.getConnection(dataSource.getUrl(), dataSource.getUsername(), dataSource.getPassword());
            //3.操作数据库
            stmt = conn.createStatement();
            //4.实现增删改查
            rs = stmt.executeQuery("SELECT * FROM user;");


            //如果有数据,rs.next()返回true
            while (rs.next()) {
                System.out.println("username= " + rs.getString("username") + ", password= "
                        + rs.getString("password") + ", name= " + rs.getString("name"));
            }

            stmt.close();
            conn.close();
        } catch (ClassNotFoundException ex1) {
            ex1.printStackTrace();
        } catch (Exception ex2) {
            ex2.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException sqlEx) {
                    //
                }
                rs = null;
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException sqlEx) {
                        //
                    }
                    conn = null;
                    if (conn != null) {
                        try {
                            conn.close();
                        } catch (SQLException sqlEx) {
                            //
                        }
                        conn = null; //垃圾回收机制会更早地垃圾释放

                    }
                }
            }
        }
    }
}

PropertySource

在Spring项目中可以使用PropertySource配置文件到对象的映射:

# 驱动的Java类名
mydatasource.driverClassName=com.mysql.cj.jdbc.Driver
#传递给JDBC驱动的用于建立连接的URL
mydatasource.url=jdbc:mysql://localhost:3306/jdbctest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
#用户名和密码
mydatasource.username=root
mydatasource.password=1234
@Data
@Component
@PropertySource("datasource.properties")
public class DataSource {
    @Value("${mydatasource.driverClassName}")
    private String driverClassName;

    @Value("${mydatasource.url}")
    private String url;

    @Value("${mydatasource.username}")
    private String username;

    @Value("${mydatasource.password}")
    private String password;
}

DataSource能够直接当作bean使用

ConfigurationProperties

在SpringBoot项目中可以使用ConfigurationProperties实现配置文件(application.yml或者application.properties) 到对象的映射:

# 驱动的Java类名
mydatasource.driverClassName=com.mysql.cj.jdbc.Driver
#传递给JDBC驱动的用于建立连接的URL
mydatasource.url=jdbc:mysql://localhost:3306/jdbctest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
#用户名和密码
mydatasource.username=root
mydatasource.password=1234
@Configuration
@ConfigurationProperties(prefix = "mydatasource")
@Data
public class DataSource {

    private String driverClassName;

    private String url;

    private String username;

    private String password;
}

配置中心

如nacos:https://nacos.io/zh-cn/docs/quick-start-spring-boot.html

如nacos,见官方文档: https://nacos.io/zh-cn/docs/quick-start-spring-boot.html

  1. 添加依赖。
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>${latest.version}</version>
</dependency>
  1. 在 application.properties 中配置 Nacos server 的地址:
nacos.config.server-addr=127.0.0.1:8848
  1. 使用 @NacosPropertySource 加载 dataId 为 example 的配置源,并开启自动更新:
@SpringBootApplication
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class NacosConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConfigApplication.class, args);
    }
}
  1. 通过 Nacos 的 @NacosValue 注解设置属性值。
@Controller
@RequestMapping("config")
public class ConfigController {

    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
    private boolean useLocalCache;

    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
存储 搜索推荐 算法
Java 大视界 -- Java 大数据在智能金融理财产品风险评估与个性化配置中的应用(195)
本文深入探讨了Java大数据技术在智能金融理财产品风险评估与个性化配置中的关键应用。通过高效的数据采集、存储与分析,Java大数据技术助力金融机构实现精准风险评估与个性化推荐,提升投资收益并降低风险。
Java 大视界 -- Java 大数据在智能金融理财产品风险评估与个性化配置中的应用(195)
|
2月前
|
人工智能 前端开发 Java
2025年WebStorm高效Java开发全指南:从配置到实战
WebStorm 2025不仅是一款强大的JavaScript IDE,也全面支持Java开发。本文详解其AI辅助编程、Java特性增强及性能优化,并提供环境配置、高效开发技巧与实战案例,助你打造流畅的全栈开发体验。
266 4
|
3月前
|
Java 应用服务中间件 Linux
在Java 12环境中配置和部署Apache Tomcat的步骤。
这段部署Tomcat的冒险旅程充满技术挑战,但同时也像游戏一样充满乐趣。它需要你提前准备,仔细执行,并随时准备解决意外情况。成功后,你就可以在这匹强壮的网络野马上,带着你的Java应用,冲向Web开发的璀璨星空。
126 56
|
3月前
|
资源调度 安全 Java
Java 大数据在智能教育在线实验室设备管理与实验资源优化配置中的应用实践
本文探讨Java大数据技术在智能教育在线实验室设备管理与资源优化中的应用。通过统一接入异构设备、构建四层实时处理管道及安全防护双体系,显著提升设备利用率与实验效率。某“双一流”高校实践显示,设备利用率从41%升至89%,等待时间缩短78%。该方案降低管理成本,为教育数字化转型提供技术支持。
89 1
|
6月前
|
Java Shell 数据库
【YashanDB知识库】调用外部UDF未能识别Java环境配置
【YashanDB知识库】调用外部UDF未能识别Java环境配置
【YashanDB知识库】调用外部UDF未能识别Java环境配置
|
8月前
|
Java Linux iOS开发
如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH
本文详细介绍如何在Windows和Linux/macOS系统上配置Java环境变量。
9673 12
|
8月前
|
前端开发 NoSQL Java
【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
本文介绍了如何配置和启动基于Java的若依(RuoYi)项目,涵盖后端和前端的详细步骤。首先,准备Redis、MySQL以及IDE(如Idea和VS)。接着,通过GitHub获取代码并导入到IDE中,执行必要的SQL文件和配置数据库密码。然后,启动Redis并进行相关配置。最后,按照前端配置步骤克隆前端代码库,打开终端执行命令完成前端配置。整个过程详细记录了每一步的操作,帮助开发者顺利部署若依项目。 如果你觉得有帮助,请点赞、关注和收藏,这将是我持续分享的动力!
3787 4
|
8月前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
437 0
|
8月前
|
Java
CentOS7.8配置Adoptium-Java17运行环境
本指南介绍如何设置清华镜像源并安装 Temurin-17-JRE 运行环境。首先,编辑 `/etc/yum.repos.d/adoptium.repo` 文件,配置清华镜像源。接着,使用 `yum install -y temurin-17-jre` 命令安装 Temurin-17-JRE,并通过 `java --version` 验证安装成功。相关配置和操作界面截图附后。
258 8
|
9月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
8658 5
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)

热门文章

最新文章