springboot 配置文件读取的两种方式,以及使用到的注解解释

了解过spring-Boot这个技术的,应该知道Spring-Boot的核心配置文件application.properties,当然也可以通过注解自定义配置文件的信息。

pom文件

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
    <!-- 单元测试使用 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot</artifactId>
      <version>1.5.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>1.5.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>1.5.6.RELEASE</version>
    </dependency>
  </dependencies>

Spring-Boot读取配置文件的方式:

一.读取核心配置文件信息application.properties的内容

核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单。

核心配置文件application.properties内容如下:

test.msg=Hello World SpringBoot
test.name=test
test.password= 123test

方式一:使用@Value方式(常用)

package cn.ar.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User: Jayden
 * Date: 2018/6/28
 * Time: 9:57
 */
@RestController//@PropertiesSource("classpath:application.properties")
public class FirstController {
    @Value("${test.name}")
    private String  name;
    @Value("${test.password}")
    private String password;

    @RequestMapping(value = "/test")
    public String  say(){
        return name+":application.propertoes里面的name值"+"/t"+password+"密码";
    }
}

注意:1.在@Value的${}中包含的是核心配置文件中的键名。在Controller类上加@RestController表示将此类中的所有视图都以JSON方式显示,类似于在视图方法上加@ResponseBody。

[email protected]配置文件路径设置,在类上添加注解,如果在默认路径下可以不添加该注解 ,我这里就在默认路径下,所以上面没用这个注解。
如果有多及目录, 比如 classpath:config/my.properties指的是src/main/resources目录下config目录下的my.properties文件.

3.多配置文件引用,若取两个配置文件中有相同属性名的值,则取值为最后一个配置文件中的值:

比如:@PropertySource({"classpath:config/my.properties","classpath:config/config.properties"})

访问:http://localhost:8080/test时得到:"方式一:test:application.propertoes里面的name值/t123test密码"

方式二:使用Environment方式

package cn.ar.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User: Jayden
 * Date: 2018/6/28
 * Time: 9:57
 */
@RestController
public class FirstController {
   /* @Value("${test.name}")
    private String  name;
    @Value("${test.password}")
    private String password;

    @RequestMapping(value = "/test")
    public String  say(){
        return name+":application.propertoes里面的name值"+"/t"+password+"密码";
    }*/
   @Autowired
   private Environment env;
    @RequestMapping(value = "/test")
    public String  say(){
        return env.getProperty("test.name") + "      " +env.getProperty("test.password");
    }

}

注意:这种方式是依赖注入Evnironment来完成,在创建的成员变量private Environment env上加上@Autowired注解即可完成依赖注入,然后使用env.getProperty("键名")即可读取出对应的值。

二.读取自定义配置文件信息,例如:detifalManager.properties

  1. 首先建立对象与配置文件映射关系
  2. 方法中使用自动注入方式,将对象注入,调用get方法获取属性值
  3. 注意:新版本的@ConfigurationProperties没有了location属性,使用@PropertySource来指定配置文件位置
  4. prefix=”user1”指的是配置文件中的前缀,如user1.name,在定义对象属性名时为private String name;
  5. 读取配置文件中的集合时,使用List来接收数据,但List必须先实例化,负责会报错

为了不破坏核心文件的原生态,但又需要有自定义的配置信息存在,一般情况下会选择自定义配置文件来放这些自定义信息,这里在resources目录下创建配置文件detifalManager.properties

resources/detifalManager.properties内容如下:

user1.name=admin11111111
user1.password=admin123qwqwq
user1.age= 15
user1.sex=男

创建管理配置的实体类:

package cn.ar.controller;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * Created with IntelliJ IDEA.
 * User: Jayden
 * Date: 2018/6/28
 * Time: 10:24
 */
@Component//加上注释@Component,可以直接在其他地方使用@Autowired来创建其实列对象
@ConfigurationProperties(prefix = "user1")//设置配置文件的前缀
@PropertySource("classpath:detifalManager.properties")//设置自定义文件的路径
public class Manager {
    private String name;
    private String password;
    private String sex;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

注意:
    在@ConfigurationProperties注释中有两个属性:
locations:指定配置文件的所在位置
prefix:指定配置文件中键名称的前缀(我这里配置文件中所有键名都是以user1.开头)
    使用@Component是让该类能够在其他地方被依赖使用,即使用@Autowired注释来创建实例。

创建测试Controller

package cn.ar.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created with IntelliJ IDEA.
 * User: Jayden
 * Date: 2018/6/28
 * Time: 10:33
 */
@RestController
public class SecondController {
    @Autowired
    Manager manager;
    @RequestMapping("/test1")
    public String say(){
        return  "name"+ manager.getName() + "password" + manager.getPassword();
    }
}

注意:由于在manager类上加了注释@Component,所以可以直接在这里使用@Autowired来创建其实例对象。

访问:http://localhost:8080/test1时得到:"name admin11111111 password  admin123qwqwq"

原文地址:https://www.cnblogs.com/laosunlaiye/p/9237937.html

时间: 2024-11-09 04:26:26

springboot 配置文件读取的两种方式,以及使用到的注解解释的相关文章

SpringBoot热部署的两种方式

SpringBoot热部署方式一共有两种,分别使用两种不同的依赖 SpringBoot 1.3后才拥有SpringBoot devtools热部署 ①:spring-boot-devtools   ②:Spring Loaded 方式一: 在项目的pom文件中添加依赖: 1 <!--热部署jar--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId&g

SpringBoot配置Bean的两种方式--注解以及配置文件

一.注解方式 编写实体类: package com.example.bean;import org.springframework.boot.context.properties.ConfigurationProperties;/** * Created by Loser100 on 2017/10/9. */@Component@ConfigurationProperties(prefix = "hello")public class HelloServiceProperties {

python 配置文件返回的两种方式,写法不一样而已

配置文件如下: [MODE]mode:{ "register":"all"} 或者 mode = {"register":"all"} 注意:只是:换成了=,效果是一样的. [basic_info] HostURL: http://www.baidu.com 或: HostURL=http://www.baidu.com @staticmethod def get_config(file_path, section, opti

axis2通过services.xml配置文件发布的两种方式

接口如下 package com.wm5920.webservice; public class HelloService { public String sayHello(){ return "hello"; } public String sayHelloToPerson(String name){ if(name==null){ name = "nobody"; } return "hello,"+name; } public void u

Springboot 热部署的两种方式

https://yiqiwuliao.com/post/spring/springbootre-bu-shu#toc_3 记得修改下面参数 1. build project auto..... 2. shift + alt + ctrl + / -> regis.... 原文地址:https://www.cnblogs.com/zyh1994/p/9809900.html

k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令: kubectl apply -f nginx.yml nginx.yml 的内容为: 资源的属性写在配置文件中,文件格式为 YAML

创建资源的两种方式

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建 kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建 要完成前面同样的工作,可执行命令: [[email protected] k8s]# kubectl apply -f nginx.yaml deployment.extens

Java连接Neo4j的两种方式

1.Neo4j数据库的两种方式 Neo4j可以以两种方式运行: Java应用程序中的嵌入式数据库 通过REST的独立服务器 不管哪一种方式,这个选择不会影响查询和使用数据库的方式. 它是由应用程序的性质(无论是独立服务器还是客户端服务器),性能,监视和数据安全性驱动的架构选择. 1.1Neo4j Server(服务器式数据库) Neo4j Server是互操作性,安全性和监控的最佳选择. 实际上,REST接口允许所有现代平台和编程语言与它进行互操作. 此外,作为独立应用程序,它比嵌入式配置更安全

java中读取配置文件ResourceBundle和Properties两种方式比较

今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网上查了一下和查了一下Java API手册,简单总结记录一下: ResourceBundle和Properties的一个主要区别就是ResourceBundle支持语言国际化,当程序需要特定于语言环境的对象时,它使用 getBundle 方法加载 ResourceBundle 类: Locale lo