java如何取到配置文件中值,从配置文件中获取配置信息的几种方法
1、利用ResourceBundle类从properties文件中获取配置信息
创建配置文件并写入配置信息
image.png
使用以下代码可以轻松获取配置信息
package com.course.httpclient.cookies;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;
public class MyCookiesForGet {
//定义一个String属性,用来存储获取到的url信息
private String url;
//定义一个ResourceBundle类的对象,用来从application.properties文件中获取配置信息
private ResourceBundle resourceBundle;
@BeforeTest
public void BeforeTest(){
//调用getBundle方法,告诉resourceBundle从哪个配置文件中获取配置信息,定义Locale.CHINA是中文信息
resourceBundle=ResourceBundle.getBundle("application", Locale.CHINA);
//传入test.url配置名称,获取配置信息并赋值给url
url=resourceBundle.getString("test.url");
}
@Test
public void testGetCookies() throws IOException {
//拼接url
String uri=url+resourceBundle.getString("getcookies");
//httpclient请求接口获取返回结果并打印
HttpClient httpClient=new DefaultHttpClient();
HttpGet httpGet=new HttpGet(uri);
HttpResponse response=httpClient.execute(httpGet);
String result= EntityUtils.toString(response.getEntity());
System.out.println(result);
}
}
2、利用SpringBoot获取properties或yaml文件中的配置信息
配置文件的名称一定要写成application,或者写成application-prod,application-dev,通过- 横杠带后缀的方式。
比如这样写:
image.png
application.yaml中写的是:
spring:
profiles:
active: prod
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/dbgirl?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
username: username
password: password
jpa:
hibernate:
ddl-auto: update
show-sql: true
该文件的名称一定要写成application才能从该文件中获取配置信息
通过active: prod来区分是哪个配置文件,哪个环境,目前是生产环境,配置成active:dev就是开发环境
datasource的配置是数据库的信息
jpa的配置是jpa插件,连接数据库会用到
看application-prod.yaml中写的内容:
server:
port : 8081 #端口号
servlet:
context-path: /test #请求路径
cupSize: B
age: 18
content: "cupSize:${cupSize}+age:${age}" #注解里面使用注解
girl:
cupSize : B
age : 22
从该文件中读取server的端口号和路径、参数信息
2.1 以下代码是用@value注解从配置文件中获取配置信息
package com.imooc.controller;
import com.imooc.properties.GirlProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/testtwo") //写到类前面,controller类中的每个方法请求时url都要加上/testtwo
public class HelloController {
//使用value注解把cupSize的参数值从yaml文件中获取过来,然后赋值给cupSize参数
@Value("${cupSize}")
private String cupSize;
@Value("${age}")
private String age;
//请求方式注解,value是指请求路径,method是请求方法
//value = {"/hello","/hi"} 是指请求url时用/hello或者/hi都可以
@RequestMapping(value = {"/hello","/hi"},method = RequestMethod.GET)
public String say(){
return cupSize+" "+age;
}
}
2.2以下代码是在配置文件中写组合配置参数:
配置文件中这样写:
image.png
代码中这些写:
package com.imooc.controller;
import com.imooc.properties.GirlProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/testtwo") //写到类前面,controller类中的每个方法请求时url都要加上/testtwo
public class HelloController {
// //获取组合参数content的值赋值给content
@Value("${content}")
private String content;
//请求方式注解,value是指请求路径,method是请求方法
//value = {"/hello","/hi"} 是指请求url时用/hello或者/hi都可以
@RequestMapping(value = {"/hello","/hi"},method = RequestMethod.GET)
public String say(){
return content;
}
}
2.3以下代码是从配置文件中获取配置参数并转换成类的属性,然后设置get和set方法去调用
配置文件中这样写:
image.png
定义实体类,使用这两个注解:
@Component
//获取前缀是girl的配置信息
@ConfigurationProperties(prefix = "girl")
代码如下:
package com.imooc.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
//获取前缀是girl的配置信息
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {
private String cupSize;
private Integer age;
public String getCupSize() {
return cupSize;
}
public void setCupSize(String cupSize) {
this.cupSize = cupSize;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
controller中使用@Autowired注解,把实体类注入到controller中,使用get方法获取参数值,代码如下:
package com.imooc.controller;
import com.imooc.properties.GirlProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/testtwo") //写到类前面,controller类中的每个方法请求时url都要加上/testtwo
public class HelloController {
//使用@Autowired自动注入函数
@Autowired
private GirlProperties girlProperties;
//请求方式注解,value是指请求路径,method是请求方法
//value = {"/hello","/hi"} 是指请求url时用/hello或者/hi都可以
@RequestMapping(value = {"/hello","/hi"},method = RequestMethod.GET)
public String say(){
return girlProperties.getCupSize()+girlProperties.getAge();
}
}
3、利用写工具类从yaml文件和properties文件中获取配置信息
先在resource中新建一个yaml的配置文件,写入一些内容
image.png
和一个properties的文件:
image.png
编写工具类代码:
package com.meituan.Util;
import org.yaml.snakeyaml.Yaml;
import java.io.*;
import java.util.Map;
import java.util.Properties;
/*
该类中封装了从yaml中获取配置信息和从properties中获取配置信息、修改配置信息3个方法
测试类中直接调用该方法传入key值就可以了。
*/
public class ElementSource {
private static String testdatayaml = "src/main/resources/testdata.yaml";
private static String testdataproperties = "src/main/resources/testdata.properties";
//从yaml文件中获取信息
public String getElementsource(String name){
try {
Yaml yaml = new Yaml();
Map map;
map = (Map) yaml.load(new FileInputStream(testdatayaml));
if (map == null){
return null;
}else if (map.get(name) == null){
return null;
}else {
String resource = map.get(name).toString();
return resource;
}
}catch (Exception e){
e.printStackTrace();
return null;
}
}
//从properties配置文件中获取配置信息,其实不用写这个工具类,直接利用resourcebundle就可以直接获取配置信息
public String getproelementsource(String keyname){
Properties properties = new Properties();
try{
InputStream inputStream = new FileInputStream(testdataproperties);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
properties.load(bufferedReader);
inputStream.close();
}catch (Exception e){
e.printStackTrace();
}
if (properties.containsKey(keyname)){
return properties.getProperty(keyname);
}else {
System.out.println("获取的值不存在");
return null;
}
}
//根据某个key值修改properties配置文件中的value值
public void setproelementsource(String keyname,String value ){
try{
//重新new一个properties
Properties properties = new Properties();
//要先创建一个inputstream的流,把文件中的内容赋予给properties,要不然properties的内容就是null,就会导致修改时把之前的内容覆盖
InputStream inputStream = new FileInputStream(testdataproperties);
properties.load(inputStream);
//要关闭inputstream流
inputStream.close();
//创建输出流
OutputStream outputStream = new FileOutputStream(testdataproperties);
//创建bufferwriter 写入数据
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,"utf-8"));
//往配置文件中写入数据,如果没有对应的key值则新增,如果有就修改
properties.setProperty(keyname,value);
//添加注释信息
properties.store(bufferedWriter,keyname+" "+value);
//关闭bufferwriter
bufferedWriter.close();
//关闭outputstream流
outputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
测试类中直接调用该方法传入key值即可从配置文件中获取数据信息和修改数据信息。
java如何取到配置文件中值,从配置文件中获取配置信息的几种方法相关推荐
- VS中C#读取app.config数据库配置字符串的三种方法(转)
关于VS2008或VS2005中数据库配置字符串的三种取法 VS2008建立Form程序时,如果添加数据源会在配置文件 app.config中自动写入连接字符串,这个字符串将会在你利用DataSet, ...
- NR基础篇下——中值滤波、多级中值滤波、多级中值混合滤波、加权中值滤波、中值有理滤波
上一篇分享了一些均值滤波相关的算法,均值滤波作为一种线性滤波器,在滤除噪声的同时也会导致边缘模糊问题.而且均值滤波对高斯噪声的效果很好,但是对于椒盐噪声的效果就很一般.但是中值滤波作为一种顺序滤波器, ...
- java 获取键盘点击_Java中获取键盘输入值的三种方法介绍
程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这 ...
- c语言用一维数组做中值滤波,快速中值滤波及c语言实现
快速中值滤波及c语言实现 学生姓名:刘勇学号: 6100410218 专业班级:数媒101 [摘要]本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程序运行的时间复杂度和 ...
- python比较两个数的和_Python中的is和==比较两个对象的两种方法
Python中的is和==比较两个对象的两种方法 在Python中有两种方式比较两个对象是否相等,分别是is和==,两者之间是不同的 ==比较的是值(如同java中的equals方法) is比较的是引 ...
- java 获取当前时间的三种方法是什么
本文主要介绍java获取当前时间的三种方法.这篇文章很详细,有一定的参考价值.有需要的朋友可以参考一下. 总结一些java中获取当前时间的方法. System.currentTimeMillis() ...
- java时间代码_java获取当前时间的四种方法代码实例
这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:Date类 public class ...
- java当前时间_java 获取当前时间的三种方法
总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...
- java get请求 参数_HttpServletRequest获取GET请求参数5种方法
首页 > Java Web > SpringMvc应用 > HttpServletRequest HttpServletRequest获取GET请求参数5种方法 HttpServle ...
最新文章
- inspinia中文管理后台_赤峰当地神马推广后台哪里有
- 进入postgresql
- VTK:PolyData之CurvaturesDemo
- 守护线程与非守护线程
- Java的JDBC事务详解
- 【前端就业课 第一阶段】HTML5 零基础到实战(十一)canvas 基础
- java obix_obix协议在java中的配置和使用详解
- 服务业小店店主生活和工作洞察报告
- Hadoop! | 大数据百科 | 数据观 | 中国大数据产业观察_大数据门户
- datastage java_使用 DataStage Java Integration Stage 和 Java Pack 从 Excel 源文件中
- 【动态规划】蓝桥2020:画廊
- 第2节 mapreduce深入学习:15、reduce端的join算法的实现
- Wendy Shijia 的「 Escher‘s Gallery」可视化作品复现系列文章(三)
- Android studio 解决Gradle下载缓慢的问题
- 无需服务端的多平台同步利器(btsync)
- android hd 输入法,Android上好用的Lime HD中文输入法03--更好的使用篇
- The server time zone value 'XXXXXXXXX' is unrecognized or represents more tha
- 史上最全各种简历模板,自荐信模板和面试技巧
- CSMA/CD-CSMA/CA
- 国内商务工作邮箱对比哪个好?常用邮箱开通哪个最好?
热门文章
- BAD packet signature 18245
- 流媒体地址文件制作方法
- (Access denied for user 'root'@'localhost' (using password: NO))
- CSU 1115: 最短的名字(字典树)
- 脚本制作Minilinux
- Proliant server setup redhat7.1(DL560)
- HackerOne 发布2021年《黑客驱动安全报告:行业洞察》
- 研究员说明如何滥用推特图像隐藏 ZIP 和 MP3 文件
- 7天期限已过,谷歌披露已遭利用的 Windows 内核 0day 详情
- Kubernetes 竞争条件漏洞的发现过程简述