springboot中获取配置文件中属性值的几种方式小结

 更新时间:2024年05月26日 10:58:29   作者:Holy_Java  
本文主要介绍了springboot中获取配置文件中属性值的几种方式小结,主要介绍了六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

第一章、使用@Value注解

①@Value注解用于获取配置文件中的属性定义并绑定到Java Bean或属性中。在核心配置文件applicatin.properties中,添加两个自定义配置项school.name和school.website。

在这里插入图片描述

②在SpringBootController中定义属性,并使用@Value注解或者自定义配置值,并对其方法进行测试

package com.example.springboot.web;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SpringBootController {
    @Value("${school.name}")
    private String schoolName;

    @Value("${school.websit}")
    private String schoolWebsit;

    @RequestMapping(value = "/springBoot/first")
    @ResponseBody
    public String say() {
        return schoolName + "------" + schoolWebsit;
    }
}

③访问浏览器成功,说明成功通过@value读取配置的属性值

在这里插入图片描述

第二章、使用@PropertySource注解

2.1)指定文件路径,在setter方法上添加@Value注解

@PropertySource(“classpath:coremail.properties”)是指定配置文件位置的注解。Spring 可以在类路径下找到并加载这个coremail.properties属性文件。需要再在属性上面搭配@value注解使用其中定义的属性值。

在这里插入图片描述

2.2)指定文件路径,在属性上添加@Value注解

在这里插入图片描述

2.3)使用ApplicationContextAware接口来获得TConfig中对应properties文件的属性值

2.3.1)TaskConfig类与TestTaskConfig类

有两个配置文件,使用两个config类指定properties类文件路径

在这里插入图片描述

@Configuration//当一个类被标注了@Configuration注解时,Spring会将这个类识别为配置类,
// 用于定义Bean的创建和配置。即使没有显式地定义Bean,配置类本身也可以被注入到其他类中

@PropertySource(value = {"classpath:mailSendConfig.properties"},encoding="utf-8")
public class  TaskConfig {
}

@Configuration
@PropertySource(value = {"classpath:testConfig.properties"},encoding="utf-8")
public class TestTaskConfig {
}

在这里插入图片描述

2.3.2)ConfigLoder类

用来加载config类

@Component
public class ConfigLoder {
    @Autowired
    static TaskConfig taskConfig;

    @Autowired
    static TestTaskConfig testTaskConfig;

    public static TaskConfig getTaskConfig(){
        return taskConfig;
    }
    public static TestTaskConfig getTestTaskConfig(){
        return testTaskConfig;
    }
}

在这里插入图片描述

2.3.3)启动类:启动只运行一次

//@SpringBootApplication
public class LineApplication implements ApplicationRunner {

    @Override
    public  void run(ApplicationArguments args) throws Exception{
        System.out.println("====================");
        XXXXService mailSend =new XXXXService();
        mailSend.run();
    }

    public static void main(String[] args){
        SpringApplication.run(LineApplication.class,args);


    }

}

2.3.4)springUtil类实现ApplicationContextAware接口

通过实现ApplicationContextAware接口获取ApplicationContext对象,来获得TaskConfig中对应properties文件的属性值。

@Component
public class SpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = applicationContext;
        }
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

    public static String getProperty(String propertyName) {
        return getApplicationContext().getEnvironment().getProperty(propertyName);
    }

    public static String getProperty(Class clazz, String PropertyName) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(clazz);
        ConfigurableEnvironment configurableEnvironment = context.getEnvironment();
        return configurableEnvironment.getProperty(PropertyName);
    }
}

2.3.5)TestGetProperties测试类:测试获取属性值

package com.icbc.app.runner;

import com.icbc.app.config.SpringUtil;
import com.icbc.app.config.TaskConfig;
import com.icbc.app.config.TestTaskConfig;
import org.springframework.stereotype.Component;

import java.util.ResourceBundle;


@Component
public class TestGetProperties {

    public void run(String... args) throws Exception {
        //第一种:获取系统环境的   systemTime   值
        System.out.println("系统值systemTime=" + System.getenv("CALLTIME"));

        //第二种:ResourceBundle获取testConfig配置文件的的  name 值
        ResourceBundle bundle = ResourceBundle.getBundle("testConfig");
        String name = bundle.getString("name");
        System.out.println("ResourceBundle获取name值=" + name);

        //第三种:TaskConfig.properties的sleepTime值
        String sleepTime = SpringUtil.getProperty(TaskConfig.class, "sleepTime");
        System.out.println("TaskConfig.properties的sleepTime值="+sleepTime);

        //第四种:TestTaskConfig.properties文件的Time值
        String time = SpringUtil.getProperty(TestTaskConfig.class, "Time");
        System.out.println("TestTaskConfig.properties文件的Time值="+time);
    }
}

第三章、使用@Configurationproperties注解

@Configurationproperties(prefix=”xxx”)prefix的作用是区分同名配置,如果不指定,那么会去配置文件中寻找与该类的属性名一致的配置文件。
prefix怎么使用呢?

在生产环境配置文件applicatin-product.properties中,有自定义的三个school前缀的配置项

在这里插入图片描述

在核心配置文件applicatin.properties中激活生产环境,这里的product对应文件名application-produc的横杠后面的produc

在这里插入图片描述

当指定prefix之后,就不需要再在属性上面搭配@value注解使用,因为当指定前缀school之后,属性就会自动注入

在这里插入图片描述

第四章、使用Java Properties类

Properties prop = new Properties();
try (InputStream input = new FileInputStream("config.properties")) {
    prop.load(input);
    String dbUrl = prop.getProperty("db.url");
    String dbUser = prop.getProperty("db.user");
    String dbPassword = prop.getProperty("db.password");
    // 使用读取到的属性进行后续操作
} catch (IOException ex) {
    ex.printStackTrace();
}

第五章、使用Environment接口

配置文件如图:

在这里插入图片描述

获取配置文件中的属性值:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {

 	public static String Value1 ;
 	public static String Value2 ;
 	
    @Autowired
    private Environment environment;

    public void getPropertyFromEnvironment() {
        Value1 = environment.getProperty("school.name");
        Value2 = environment.getProperty("school.buile.age");
        System.out.println("Value1: " + Value + "Value1: "+Value2 );
    }
}

第六章、使用ResourceBundle类

新建一个配置文件:ResourceBunTest.properties,信息如下图

在这里插入图片描述

使用ResourceBundle类获取配置文件内容

public class ResourceBundleTest {

    public static void main(String[] args) {
        testResoBund();
    }
    //获取配置文件信息的方法
    public static void testResoBund(){
    //根据配置文件名称获得ResourceBundle  对象
        ResourceBundle bundle = ResourceBundle.getBundle("ResourceBunTest");
        String userId = bundle.getString("userId");
        String userName = bundle.getString("userName");
        String age = bundle.getString("age");

        System.out.println(userId+"---"+userName+"---"+age);

    }
}

测试结果:获取成功

在这里插入图片描述

到此这篇关于springboot中获取配置文件中属性值的几种方式小结的文章就介绍到这了,更多相关springboot获取配置文件属性值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 详解处理Java中的大对象的方法

    详解处理Java中的大对象的方法

    本文我们将讲解一下对于“大对象”的优化。这里的“大对象”,是一个泛化概念,它可能存放在 JVM 中,也可能正在网络上传输,也可能存在于数据库中,快跟随小编一起学习一下
    2022-04-04
  • 关于Java语法糖以及语法糖的原理和用法

    关于Java语法糖以及语法糖的原理和用法

    这篇文章主要介绍了关于Java什么是语法糖以及语法糖的种类,也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用,需要的朋友可以参考下
    2023-05-05
  • Spring Boot中使用Activiti的方法教程(二)

    Spring Boot中使用Activiti的方法教程(二)

    工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,下面这篇文章主要给大家介绍了关于Spring Boot中使用Activiti的相关资料,需要的朋友可以参考下
    2018-08-08
  • springboot通过jar包启动中文日志乱码问题及解决

    springboot通过jar包启动中文日志乱码问题及解决

    这篇文章主要介绍了springboot通过jar包启动中文日志乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • SpringBoot集成分页插件PageHelper的配置和使用过程

    SpringBoot集成分页插件PageHelper的配置和使用过程

    这篇文章主要介绍了SpringBoot集成分页插件PageHelper的配置和使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java中Socket实现数据通信的示例代码

    Java中Socket实现数据通信的示例代码

    本文主要介绍了Java中Socket实现数据通信的示例代码,Socket可以建立起客户端和服务器之间的连接,实现数据的传输和交互,感兴趣的可以了解一下
    2023-09-09
  • MyBatis的JdbcType与Oracle、MySql数据类型一览表

    MyBatis的JdbcType与Oracle、MySql数据类型一览表

    这篇文章主要介绍了MyBatis的JdbcType与Oracle、MySql数据类型一览表,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Springboot中使用缓存的示例代码

    Springboot中使用缓存的示例代码

    这篇文章主要介绍了Springboot中使用缓存的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Java连接Oracle数据库实例解析

    Java连接Oracle数据库实例解析

    数据库的操作是当前系统开发必不可少的开发部分之一。接下来通过本文给大家介绍Java连接Oracle数据库实例解析,非常不错具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-06-06
  • Java线程之间数据传递的实现示例(4种)

    Java线程之间数据传递的实现示例(4种)

    我们经常会遇到父子线程数据传递(非调用参数)的场景,本文主要介绍了Java线程之间数据传递的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论