• SpringBoot获取全局配置文件的属性以及@ConfigurationProperties实现类型安全的配置


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

    1). application.properties

    2).application.yml

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

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

    然后编辑以下内容

    book.author=Tom
    book.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     @ResponseBody
    13     public String showInfo()
    14     {
    15         return author+":"+name;
    16     }
    17     public static void main(String[] args) {
    18         // TODO Auto-generated method stub
    19         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     @ResponseBody
    30     public String showInfo() {
    31         return author + ":" + name;
    32     }
    33 
    34     public static void main(String[] args) {
    35         // TODO Auto-generated method stub
    36         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注解。

    或者以下的解释:

     

     

     

     

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

     

  • 相关阅读:
    [PHP]socket的连接超时 与 读取/写入超时
    [PHP]引用返回与节省内存
    [PHP]实体类基类和序列化__sleep问题
    [PHP]日志处理error_log()函数和配置使用
    [PHP] 使用反射实现的控制反转
    [PHP] debug_backtrace()可以获取到代码的调用路径追踪
    [TCP/IP] TCP的传输连接管理
    [PHP] sys_get_temp_dir()和tempnam()函数报错与环境变量的配置问题
    [PHP] ubuntu下使用uuid扩展获取uuid
    [Linux] host dig nslookup查询域名的DNS解析
  • 原文地址:https://www.cnblogs.com/Guhongying/p/10511049.html
Copyright © 2020-2023  润新知