zoukankan      html  css  js  c++  java
  • SpringBoot(二) 主程序详解和配置文件如何配置

    SpringBoot主程序详解

     1 /**
     2  *  @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
     3  */
     4 @SpringBootApplication
     5 public class HelloWorldMainApplication {
     6 
     7     public static void main(String[] args) {
     8 
     9         // Spring应用启动起来
    10         SpringApplication.run(HelloWorldMainApplication.class,args);
    11     }
    12 }

    上段程序是一个SpringBoot主程序,入口方法。

    @SpringBootApplication:Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
          @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
          @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {}

    @SpringBootConfiguration:Spring Boot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类。

    @EnableAutoConfiguration:开启自动配置功能。

    ​@EnableAutoConfigurationImportSelector:导入哪些组件的选择器。将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中。有了自动配置类,免去了我们手动编写配置注入功能组件等的工作。

    ​ SpringBoot 配置

     Spring Boot使用了一个全局的配置文件application.properties,放在src/main/resources目录下或者类路径的/config下。

     Sping Boot的全局配置文件的作用:修改SpringBoot自动配置的默认值。SpringBoot在底层都会给我们自动配置好。

     名称是固定的:application.properties  或者 application.yml

        yml是YAML(YAML Ain’t Markup Language)语言。它是以数据为中心的语言,它比json、xml更适合做配置文件。

    配置实例:

        

    <!--  xml形式配置  -->
    <server>
      <port>8081</port>
    </server>
    
    <!-- properties形式配置  -->
    server.port=8081
    
    
    <!--  yml形式配置  -->
    server:
      port: 8081

     YML语法   自定义属性

    1.基本语法

      书写形式 k:  v    ==>    表示一对键值对(冒号和v之间的空格必须有);

        以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的。

        属性值的英文大小写敏感。

    server:
        port: 8081
        path: /hello

    2.字面量

    普通的值(数字,字符串,布尔):   k: v  ==> v 直接编写数字,字符串,布尔等值。如果是字符串添加双引号,则不会进行转义。使用单引号会进行转义。

    对象: k : v

    friends:
        lastName: zhangsan
        age: 20
    //也可以和ajax一样编写
    friends: {lastName: zhangsan,age: 18}

    数组(list、set等):

    pets:
     - cat
     - dog
     - pig
    
    //或者
    
    pets: [cat,dog,pig]

    3.使用配置文件中的值

     1 //配置文件
     2 person:
     3     lastName: hello
     4     age: 18
     5     boss: false
     6     maps: {k1: 11,k2: 12}
     7     list:
     8       - lisi
     9       - wangwu
    10     dog:
    11       name: 小狗
    12       age: 12
    13 
    14 
    15 
    16 /**
    17  * 将配置文件中配置的每一个属性的值,映射到这个组件中
    18  * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定.
    19  *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
    20  *
    21  * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
    22  *
    23  */
    24 @Component
    25 @ConfigurationProperties(prefix = "person")
    26 public class Person {
    27 
    28     private String lastName;
    29     private Integer age;
    30     private Boolean boss;
    31     private List<Object> list;
    32     private Dog dog;
    33 }
    34 
    35 
    36 //pom.xml文件添加属性
    37 <!--导入配置文件处理器,配置文件进行绑定就会有提示-->
    38     <dependency>
    39       <groupId>org.springframework.boot</groupId>
    40       <artifactId>spring-boot-configuration-processor</artifactId>
    41       <optional>true</optional>
    42     </dependency>

     还需要在spring Boot入口类加上@EnableConfigurationProperties并指明要加载哪个bean,如果不写ConfigBean.class,在建好的类那边添加。最后在Controller中引入ConfigBean使用即可。注意使用自动注入的注解。

    在1.5的版本之后,需要添加@Configuration和@PropertySource(“classpath:xxxxxx.properties”)后才可以读取。

     1 /**
     2  * 将配置文件中配置的每一个属性的值,映射到这个组件中
     3  * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
     4  *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
     5  *
     6  * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
     7  *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
     8  *
     9  */
    10 @PropertySource(value = {"classpath:person.properties"})
    11 @Component
    12 @ConfigurationProperties(prefix = "person")
    13 //@Validated
    14 public class Person {}

    4.使用配置文件生成随机数

    在配置文件中${random} 可以用来生成各种不同类型的随机值,例如 生成 int 值、long 值或者 string 字符串。

    secret=${random.value}
    number=${random.int}
    longnumber=${random.long}
    uuid=${random.uuid}

     @Value和@Validated

     @ConfigurationProperties@Value
    功能 批量注入配置文件中的属性 一个个指定
    松散绑定(松散语法) 支持 不支持
    SpEL 不支持 支持
    JSR303数据校验 支持 不支持
    复杂类型封装 支持 不支持

    配置文件yml还是properties他们都能获取到值。

    书写形式: @Value("${配置文件中的key}")。注意key要全称。

    例如:@Value("${person.age}"),@Value("${person.dog.name}")

       计算: @Value("#{12*2}")  ==>  对应的值就是24

    数据校验:@Valiadated注解自动校验。

     1 @Component
     2 @ConfigurationProperties(prefix = "person")
     3 @Validated
     4 public class Person {
     5    //lastName必须是邮箱格式
     6     @Email
     7     private String lastName;
     8     //@Value("#{11*2}")
     9     private Integer age;
    10     //@Value("true")
    11     private Boolean boss;
    12 
    13     private Date birth;
    14     private Map<String,Object> maps;
    15     private List<Object> lists;
    16     private Dog dog;
    17 }

    配置文件读取优先级

    application.properties和application.yml文件可以放在一下四个位置:

    • 外置,在相对于应用程序运行目录的/congfig子目录里。
    • 外置,在应用程序运行的目录里
    • 内置,在config包内
    • 内置,在Classpath根目录

    按照优先级排序,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性

    另外,如果在相同优先级位置同时有application.properties和application.yml,那么application.yml里面的属性就会覆盖application.properties里的属性。

    Profile多环境配置

    当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同,尤其是开发过程中的开发环境和生产环境的配置文件。
    如果按照以前的做法,就是每次发布的时候替换掉配置文件,这样太麻烦了,Spring Boot的Profile就给我们提供了解决方案,命令带上参数就搞定。

    在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
    
    application-test.properties:开发环境
    application-prod.properties:生产环境

    想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},也就是上述代码的test、prod这2个。

    server:
      port: 8081
    spring:
      profiles:
        active: prod
    
    ---
    server:
      port: 8083
    spring:
      profiles: test
    
    
    ---
    
    server:
      port: 8084
    spring:
      profiles: prod  #指定属于哪个环境
  • 相关阅读:
    容器云技术:容器化微服务,Istio占C位出道
    如何用istio实现请求超时管理
    技术进阶:Kubernetes高级架构与应用状态部署
    如何基于 K8S 多租能力构建 Serverless Container
    面试题目<转载>
    PHP面试出场率较高的题目<转载>
    命名规范
    字符串大小写转换(三种方法)
    php反转输出字符串(两种方法)
    获取文件名后缀的方法
  • 原文地址:https://www.cnblogs.com/JiangLai/p/9966075.html
Copyright © 2011-2022 走看看