作者:手机用户2602889575 | 来源:互联网 | 2023-09-17 09:30
前言:了解过spring-Boot这个技术的,应该知道Spring-Boot的核心配置文件application.properties,当然也可以通过注解自定义配置文件**.properties的信息。
一.读取核心配置文件信息application.properties的内容
核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单。
(1)核心配置文件application.properties内容如下:
-
test.msg=Hello World SpringBoot
(1)方式一:使用@Value方式(常用)
-
package Solin.controller;
-
-
import org.springframework.beans.factory.annotation.Value;
-
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.bind.annotation.RestController;
-
-
@RestController
-
public class WebController {
-
@Value("${test.msg}")
-
private String msg;
-
-
@RequestMapping("/index1")
-
public String index1(){
-
return "方式一:"+msg;
-
}
-
}
注意:在@Value的${}中包含的是核心配置文件中的键名。在Controller类上加@RestController表示将此类中的所有视图都以JSON方式显示,类似于在视图方法上加@ResponseBody。
访问:http://localhost:8088/index1时得到:"方式一:Hello World
SpringBoot"
(2)方式二:使用Environment方式
-
package Solin.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;
-
-
@RestController
-
public class WebController {
-
@Autowired
-
private Environment env;
-
-
@RequestMapping("/index2")
-
public String index2(){
-
return "方式二:"+env.getProperty("test.msg");
-
}
-
}
注意:这种方式是依赖注入Evnironment来完成,在创建的成员变量private Environment env上加上@Autowired注解即可完成依赖注入,然后使用env.getProperty("键名")即可读取出对应的值。
访问:http://localhost:8088/index2时得到:"方式二:Hello
World SpringBoot"
(2)核心配置文件application-dev.yml内容如下:
-
# --**银行配置文件路径 start
czb:
configPath: /usr/local/czbConfig/config.properties
# --浙商银行相关配置文件路径 end
application*.yml核心配置文件,也是用上面两种方式读取其内容。例如:如下图使用方式一来读取:
二.读取自定义配置文件信息,例如:author.properties
为了不破坏核心文件的原生态,但又需要有自定义的配置信息存在,一般情况下会选择自定义配置文件来放这些自定义信息,这里在resources
目录下创建配置文件authorA.properties
resources/author/authorA.properties
内容如下:
-
auth.name=Solin
-
auth.age=22
创建管理配置的实体类:
-
package Solin.controller;
-
-
import org.springframework.boot.context.properties.ConfigurationProperties;
-
import org.springframework.context.annotation.Configuration;
-
import org.springframework.stereotype.Component;
-
-
//加上注释@Component,可以直接其他地方使用@Autowired来创建其实例对象
-
@Component
-
//springboot1.5之前的版本这么用,1.5版本之后取消了locations属性,替代方案看最下面。
-
@ConfigurationProperties(prefix = "auth",locations = "classpath:/author/authorA.properties")
-
//在启动类上增加@EnableConfigurationProperties注解,**自定义的配置类(重要)
-
public class MyWebConfig{
-
private String name;
-
private int age;
-
public String getName() {
-
return name;
-
}
-
public void setName(String name) {
-
this.name = name;
-
}
-
public int getAge() {
-
return age;
-
}
-
public void setAge(int age) {
-
this.age = age;
-
}
-
}
注意:
在@ConfigurationProperties注释中有两个属性:
locations:指定配置文件的所在位置
prefix:指定配置文件中键名称的前缀(我这里配置文件中所有键名都是以auth.开头)
使用@Component是让该类能够在其他地方被依赖使用,即使用@Autowired注释来创建实例。
创建测试Controller
-
package Solin.controller;
-
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.stereotype.Controller;
-
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.bind.annotation.ResponseBody;
-
-
@Controller
-
public class ConfigController {
-
@Autowired
-
private MyWebConfig conf;
-
-
@RequestMapping("/test")
-
public @ResponseBody String test() {
-
return "Name:"+conf.getName()+"---"+"Age:"+conf.getAge();
-
}
-
}
注意:由于在Conf类上加了注释@Component,所以可以直接在这里使用@Autowired来创建其实例对象。
访问:http://localhost:8088/test时得到:"Name:Solin---Age:22"
备注:spring boot1.5以上版本@ConfigurationProperties取消locations注解后的替代方案,只是下面注解变了,别的都一样。
创建管理配置的实体类:
-
package Solin.controller;
-
-
import org.springframework.boot.context.properties.ConfigurationProperties;
-
import org.springframework.context.annotation.Configuration;
-
import org.springframework.stereotype.Component;
-
-
-
@Component
-
@ConfigurationProperties(prefix ="auth")
-
@PropertySource("classpath:/author/authorA.properties")//
@PropertySource
来指定自定义的资源目录
-
//在启动类上取消掉@EnableConfigurationProperties注解,springboot1.5版本之后不需要@EnableConfigurationProperties注解了。
-
public class MyWebConfig{
-
private String name;
-
private int age;
-
public String getName() {
-
return name;
-
}
-
public void setName(String name) {
-
this.name = name;
-
}
-
public int getAge() {
-
return age;
-
}
-
public void setAge(int age) {
-
this.age = age;
-
}
-
}
-
test.msg=Hello World SpringBoot