博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot获取全局配置文件的属性以及@ConfigurationProperties实现类型安全的配置
阅读量:5087 次
发布时间:2019-06-13

本文共 2941 字,大约阅读时间需要 9 分钟。

在SpringBoot,可以定义一个全局配置文件,全局配置文件有两种形式:

1). application.properties

2).application.yml

二者的后缀名不同,编辑的格式也不同,但都是全局配置文件,二者选其一即可,都可以起到相同的作用

在你的maven工程下的src/main/resources 新建一个文件,以 application.properties为例。

然后编辑以下内容

book.author=Tombook.name=Spring

然后在src/main/java下新建一个java.class并写入以下的代码

1 @EnableAutoConfiguration   //根据所依赖的jar包进行自动配置 2 @Controller 3 public class Example { 4      5     @Value("${book.author}") 6     private String author; 7      8     @Value("${book.name}") 9     private String name;10     11     @RequestMapping("/bookInfo")    //映射路由12     @ResponseBody13     public String showInfo()14     {15         return author+":"+name;16     }17     public static void main(String[] args) {18         // TODO Auto-generated method stub19         SpringApplication.run(Example.class,args);20         21     }22 23 }

保存后构建maven,然后运行该java.class

就可以在相应的地址(http://localhost:8080/bookInfo)获取对应的属性。

 

 

 

 

当然,如果application.properties中的属性比较少,用上述的方式是可行的,但是如果application.properties中有很多的属性的时候,每次都要写一次@Value,是不是过于累赘?

于是有 @ConfigurationProperties实现类型安全的配置(在application.properties的基础上)。

先看具体的实现,application.properties配置文件的内容和上面的相同

1 @EnableAutoConfiguration // 根据所依赖的jar包进行自动配置 2 @Controller 3 @ConfigurationProperties(prefix = "book") 4 public class Example { 5  6     // @Value("${book.author}") 7     private String author; 8  9     // @Value("${book.name}")10     private String name;11 12     public String getAuthor() {13         return author;14     }15 16     public void setAuthor(String author) {17         this.author = author;18     }19 20     public String getName() {21         return name;22     }23 24     public void setName(String name) {25         this.name = name;26     }27 28     @RequestMapping("/bookInfo") // 映射路由29     @ResponseBody30     public String showInfo() {31         return author + ":" + name;32     }33 34     public static void main(String[] args) {35         // TODO Auto-generated method stub36         SpringApplication.run(Example.class, args);37 38     }39 40 }

 

 注意:@ConfigurationProperties(prefix = "book"),写在获取成员变量的类前。

    然后就是,对于类中的成员变量命名,要是application.properties属性中除了前缀外的剩余部分,比如我的application.properties中的 book.name,那么想获取其属性时,就要定义一个String name,此外,成员变量需要get和set方法。

              最后,关于application.properties配置文件中,属性的命名最好都已相同的前缀开头(比如上面都是以book开头)

 

这样,就不用每次都写@Value了

 

 

关于 @Controller和@RestController的区别

@RestController,一般是使用在类上的,它表示的意思其实就是结合了@Controller和@ResponseBody两个注解,@ResponseBody,一般是使用在单独的方法上的,需要哪个方法返回json数据格式,就在哪个方法上使用,具有针对性。

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。 RestController使用的效果是将方法返回的对象直接在浏览器上展示成json格式,而如果单单使用@Controller会报错,需要ResponseBody配合使用。

1、如果只是使用@RestController注解Controller类,则方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。 例如:本来应该到success.jsp页面的,则其显示success.

2、如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。

3、如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

或者

 

 

 

 

此外,在配置文件中可以配置的属性请参考:

 

转载于:https://www.cnblogs.com/Guhongying/p/10511049.html

你可能感兴趣的文章
高效法则 之 你还在用这么low的方法打开软件吗?
查看>>
k火车座位分布图
查看>>
C#集合之STACK
查看>>
容易混淆的 i++ 与 ++i
查看>>
bzoj 4480: [Jsoi2013]快乐的jyy
查看>>
Taxes
查看>>
算法导论(第三版)Exercises2.3(归并排序、二分查找、计算集合中是否有和为X的2个元素)...
查看>>
算法导论(第三版)Problems2(归并插入排序、数列逆序计算)
查看>>
d3.js:数据可视化利器之 交互行为:响应DOM事件
查看>>
微信小程序(18)-- 自定义头部导航栏
查看>>
CSS继承—深入剖析
查看>>
IOS开发中的分享到邮件
查看>>
Resharper插件的使用
查看>>
unity中UI的屏幕自适应代码
查看>>
lagou数据爬取
查看>>
井底飞天
查看>>
<a>标签实现锚点跳跃,<a>标签实现href不跳跃另外加事件(ref传参)
查看>>
C# async/await异步操作:异步执行方法封装
查看>>
display:inline、block、inline-block的区别
查看>>
geotrellis使用(二十五)将Geotrellis移植到spark2.0
查看>>