springboot原理实战(5)-配置文件操作

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: springboot原理实战(5)-配置文件操作

目录


本篇博客主要的内容概要:

1dc618a0ed9580ce8bfa6facb208c08f.png


一.读取单个配置文件:


application.properties中自定义2个属性


local.ip=192.168.1.100
local.port=8080


@Value读取


@Component
public class Test {
    @Value("${local.ip}")
    private String ip;
    @Value("${local.port}")
    private Integer port;
    public void show(){
        System.out.println("local.ip===="+ip );
        System.out.println("local.port===="+port);
    }
}


入口中测试下:


@SpringBootApplication
public class Demo2Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
        context.getBean(Test.class).show();
        context.close();
    }
}


结果显示已经读取到属性:

5d4c6812c8535adbb050f4ddf2e1bce8.png


②通过Environment的getProperty方法


修改test试下:


@Component
public class Test {
    @Autowired
    private Environment env;
    public void show(){
        System.out.println("local.ip===="+env.getProperty("local.ip") );
        System.out.println("local.ip===="+env.getProperty("local.port") );
    }
}


运行入口函数:


1dc618a0ed9580ce8bfa6facb208c08f.png

测试结果ok。

同时也可以在入口函数中使用:


@SpringBootApplication
public class Demo2Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
        context.getBean(Test.class).show();
        System.out.println(context.getEnvironment().getProperty("local.ip"));
        System.out.println(context.getEnvironment().getProperty("local.port"));
        context.close();
    }
}


运行结果:

1dc618a0ed9580ce8bfa6facb208c08f.png

为什么context可以直接使用这种方式调用呢?

看下e-r图:

5d4c6812c8535adbb050f4ddf2e1bce8.png

ConfigurableApplicationContext 的上级可以找到EnvironmentCapable这个接口,该接口有获取Enviroment对象的方法,所以就可以直接使用了。

46a9d80a6e05e4e3b19d57a0ee70bcdf.png


二、配置文件的属性值操作


1.配置属性可以为空值


application.properties中让tomcat.port为空值


local.ip=192.168.1.100
local.port=8080
tomcat.port=


@Component
public class Test { 
    @Value("${tomcat.port}")
    private String tomcatPort;      
    public void show(){
        System.out.println("local.ip===="+tomcatPort );
    }
}


测试一下:


@SpringBootApplication
public class Demo2Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
        context.getBean(Test.class).show();     
        context.close();
    }


运行结果:没有报错,打印空值:

1dc618a0ed9580ce8bfa6facb208c08f.png


2.配置属性设置默认值


@Component
public class Test {
    @Value("${tomcat.port:9090}")
    private String tomcatPort;
    public void show(){
        System.out.println("tomcat.port===="+tomcatPort );
    }
}


然后,properties配置文件中,删除这个属性 tomcat.port=

1dc618a0ed9580ce8bfa6facb208c08f.png

测试,已经设置了默认值9090:

5d4c6812c8535adbb050f4ddf2e1bce8.png


三、修改配置文件名称:


配置文件默认名称为:application,后缀,为properties或者yml:

如果不是这个名会报错:


怎么解决呢?


方式有2种,一种是启动参数修改,另一种哦是用@PropertySource指定。

我们先说启动参数修改的方法,注解的后面讲配置文件位置的时候一块说:


@Component
public class Test {
    @Value("${local.port}")
    private String port;
    public void show(){
        System.out.println("local.port===="+port );
    }
}


修改默认配置文件名称为app.properties:

1dc618a0ed9580ce8bfa6facb208c08f.png

启动报错,解决方式:

使用-spring.config.name来指定,只需要指定文件的名字,文件扩展名可以省略:

5d4c6812c8535adbb050f4ddf2e1bce8.png

再次运行,显示了属性值:

66ba272a0bfc97be54a5fa679e3d5482.png


四、配置配置文件位置操作


1.默认位置


默认位置在resurces的目录下,或者resources下的config目录下.


2.设置在其他位置并读取


启动方式设置,和刚才的修改配置文件名一样


我们来演示个复杂的,多个配置文件。一个在resources的其他目录下,一个在本地盘符,用启动方式设置启动,看是否可以读取到属性值:


项目中的配置文件

1dc618a0ed9580ce8bfa6facb208c08f.png

注意配置文件也可以是${}引用,如下面的app.name如果想使用上面的name的话:

app.properties内容:
local.ip=192.168.1.100
local.port=8080
name=springboot
app.name=this is ${name}
1


项目外的配置文件:

5d4c6812c8535adbb050f4ddf2e1bce8.png

my配置内容:


jetty.port=18880

修改启动类:

spring.config.location=classpath:/conf/app.properties,file:D:/tmp/my.properties

1dc618a0ed9580ce8bfa6facb208c08f.png

@Component
public class Test {
    @Value("${local.ip}")
    private String ip;
    @Value("${app.name}")
    private String appName;
    @Value("${jetty.port:9090}")
    private String jettPort;
    public void show(){
        System.out.println("local.ip===="+ip);
        System.out.println("app.name===="+appName);
        System.out.println("jetty.port===="+jettPort);
    }
}


运行入口函数:

5d4c6812c8535adbb050f4ddf2e1bce8.png

结果显示: 内部外部的配置文件都打印了。


@PropertySource编码方式读取


编写一个jdbc.properties


url=jdbc:mysql:///springboot
driverClassName=com.mysql.jdbc.Driver
@Component
@PropertySource(value = "classpath:jdbc.properties",encoding = "utf-8")
public class JdbcConfig {
    @Value("${url}")
    private String url;
    @Value("${driverClassName}")
    private String driverClassName;
    @Autowired
    private Environment env;
    public void show(){
        System.out.println("=============DataSourcePropeties===========");
        System.out.println("url: ===="+  env.getProperty("url"));
        System.out.println("driverClassName:==== "+ driverClassName );
    }
}

入口类:


@SpringBootApplication
public class Demo2Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
        context.getBean(JdbcConfig.class).show();
        context.close();
    }
}


看下运行结果:

1dc618a0ed9580ce8bfa6facb208c08f.png

已经读取出来了。


五、一次读取多个配置文件属性


主要的方式就是使用@ConfigurationProperties(prefix = "xx"),配置文件前缀如果prefix 也可不写。


重写jdbc.properties


ds.url=jdbc:mysql:///springboot

ds.driverClassName=com.mysql.jdbc.Driver
ds.username=root
ds.password=12345


DataSourcePropeties 类,必须得有set方法:


@Component
@PropertySource(value = "classpath:jdbc.properties",encoding = "utf-8")
@ConfigurationProperties(prefix = "ds")
public class DataSourcePropeties {
    private String url;
    private String driverClassName;
    private String username;
    private String password;
    public void show(){
        System.out.println("========DataSourcePropeties============");
        System.out.println("ds.url: ===="+  url);
        System.out.println("ds.driverClassName:==== "+ driverClassName );
        System.out.println("ds.username:==== "+ username );
        System.out.println("ds.password:==== "+ password );
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getDriverClassName() {
        return driverClassName;
    }
    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}


测试:


@SpringBootApplication
public class Demo2Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Demo2Application.class, args);
        context.getBean(DataSourcePropeties.class).show();
        context.close();
    }
}


结果:

5d4c6812c8535adbb050f4ddf2e1bce8.png


完美显示.


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
安全 Java 测试技术
Spring Boot集成支付宝支付:概念与实战
【4月更文挑战第29天】在电子商务和在线业务应用中,集成有效且安全的支付解决方案是至关重要的。支付宝作为中国领先的支付服务提供商,其支付功能的集成可以显著提升用户体验。本篇博客将详细介绍如何在Spring Boot应用中集成支付宝支付功能,并提供一个实战示例。
25 2
|
7天前
|
Java 关系型数据库 数据库
Spring Boot多数据源及事务管理:概念与实战
【4月更文挑战第29天】在复杂的企业级应用中,经常需要访问和管理多个数据源。Spring Boot通过灵活的配置和强大的框架支持,可以轻松实现多数据源的整合及事务管理。本篇博客将探讨如何在Spring Boot中配置多数据源,并详细介绍事务管理的策略和实践。
28 3
|
5天前
|
Java 调度 Maven
Springboot实战篇--Springboot框架通过@Scheduled实现定时任务
Spring Boot的Scheduled定时任务无需额外Maven依赖,通过`@EnableScheduling`开启。任务调度有两种方式:fixedRate和fixedDelay,前者任务结束后立即按设定间隔执行,后者在任务完成后等待设定时间再执行。更灵活的是cron表达式,例如`0 0 3 * * ?`表示每天3点执行。实现定时任务时,需注意默认单线程执行可能导致的任务交错,可通过自定义线程池解决。
|
5天前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。
|
5天前
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
|
5天前
|
XML Java 数据库连接
Springboot整合mybatisPlus操作数据库
MyBatis-Plus是MyBatis的增强工具,简化开发、提高效率。它提供官网文档,便于集成到SpringBoot项目中。集成步骤包括添加mybatis-plus-boot-starter和数据库驱动依赖,配置数据源,扫描Mapper类包。Mapper接口继承BaseMapper即可使用基本的CRUD操作。示例代码展示了Service层的增删改查实现。MyBatisPlus还支持逻辑删除、自动填充等功能,同时可与Mybatis XML配合使用,通过调整配置指定XML映射文件位置。
|
6天前
|
XML Java API
Spring Boot 整合 LiteFlow 规则引擎:概念与实战
【4月更文挑战第30天】在现代软件开发中,规则引擎允许我们以声明式的方式定义业务逻辑和决策路径。LiteFlow 是一个轻量级、易于使用的组件式规则引擎,它可以与 Spring Boot 应用无缝整合。本文将介绍如何在 Spring Boot 项目中引入 LiteFlow,实现灵活的业务流程管理。
19 0
|
6天前
|
开发框架 Java Maven
SpringBoot-Starter 概念与实战
【4月更文挑战第30天】Spring Boot 是一个基于 Spring Framework 的开发框架,旨在简化 Spring 应用程序的搭建和开发。Spring Boot 提供了大量的 Starter(启动器)来简化项目的依赖管理和配置,其中最为常见的是 SpringBoot-Starter。
23 1
|
7天前
|
安全 Java 测试技术
利用Java反射机制提高Spring Boot的代码质量:概念与实战
【4月更文挑战第29天】Java反射机制提供了一种强大的方法来在运行时检查或修改类和对象的行为。在Spring Boot应用中,合理利用反射可以提高代码的灵活性和可维护性。本篇博客将探讨Java反射的核心概念,并展示如何通过反射提高Spring Boot项目的代码质量。
22 0
|
7天前
|
监控 Java 测试技术
Spring Boot与事务钩子函数:概念与实战
【4月更文挑战第29天】在复杂的业务逻辑中,事务管理是确保数据一致性和完整性的关键。Spring Boot提供了强大的事务管理机制,其中事务钩子函数(Transaction Hooks)允许开发者在事务的不同阶段插入自定义逻辑。本篇博客将详细探讨事务钩子函数的概念及其在Spring Boot中的应用。
21 1