美文网首页
【springboot 】(2)

【springboot 】(2)

作者: 语隔秋烟_ | 来源:发表于2020-03-16 11:30 被阅读0次

    1.Spring Boot 配置文件:

    不管是通过官方提供的方式获取 Spring Boot 项目,还是通过 IDEA 快速的创建 Spring Boot 项目,我们都会发现在 resource 有一个配置文件 application.properties,也有可能是application.yml.这个文件也就是 Spring Boot 的配置文件。

    YAML 语法规则:

    1.缩进表示层级
    2.大小写敏感
    3.缩进只能使用空格
    4.空格的数量不重要,但是相同层级的元素要左侧对齐

    “#” 表示开头的行表示注释

    YAML 支持的数据结构:

    1.单纯的变量,不可再分的单个的值,如数字,字符串等。

    name: abc
    age: 12
    # ~表示NULL值
    email: ~ 
    # 多行字符串可以使用|保留换行符,也可以使用>折叠换行。
    # +表示保留文字块末尾的换行,-表示删除字符串末尾的换行。
    message:|-
     Hello world
    

    2.对象,键值对的集合。

    lang:
    - java
    - golang
    - c
    # 或者行内写法
    lang:[java,golang,c]
    

    3.数组,一组按次序排列的值。

    person:
     name:abc
     age:20
    # 或者行内写法
    person:{name:Darcy,age:20}
    
    使用 YAML 支持的三种数据结构通过组合可以形成复杂的复合结构。
    #WEB Configuration
    spring:
        application:
            name: boot
            profiles: default
        mvc:
            view:
              prefix: /WEB-INF/pages
              suffix: .jsp
        devtools:
              restart:
                #热部署生效
                enabled: false
                #设置重启的目录
                #additional-paths: src/main/java
                #classpath目录下的WEB-INF文件夹内容修改不重启
                exclude: WEB-INF/**
        # HTTP response compression (GzipFilterProperties)
        http:
            gzip:
              min-gzip-size: 10k
              deflate-compression-level: 2
              buffer-size: 50k
            encoding:
              charset: UTF-8
              enabled: true
        #DB Configuration:
        datasource:
          first:
            jdbc-url: jdbc:mysql://xx.xx.xx.xx:3306/xxxxdb?useUnicodex=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
            username: xxxx
            password: xxxx
            driver-class-name: com.mysql.cj.jdbc.Driver
            type: com.alibaba.druid.pool.DruidDataSource
            #Druid Configuration   Druid管理界面:http://ip:port/druid/index.html;用户名和密码即数据库用户名和密码
            # 初始化大小,最小,最大
            minIdle: 5
            initialSize: 5
            maxActive: 200
            testOnBorrow: false
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            testOnReturn: false
            # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
            filters: stat,wall,log4j
            logSlowSql: true
        #orgsync DB Configuration
        #second:
          #jdbc-url: jdbc:oracle:thin:@xx.xxx.x.xxx:xxxx/ora11g
          #username: xxxxxxx
          #password: xxxxxxx
          #driver-class-name: oracle.jdbc.driver.OracleDriver
          #type: com.alibaba.druid.pool.DruidDataSource
          #minIdle: 5
          # initialSize: 5
          #maxActive: 200
          #maxWait: 60000
        #Redis Configuration
        #redis:
            #database: 14
            #host: xx.xxx.x.xxx
            #port: 6379
            #password: xxxx_xxxx
            #timeout: 20000
            #pool:
                #max-active: 8
                #max-wait: -1
                #max-idle: 8
                #min-idle: 0
    #Server Configuration
    server:
      port: 7777
      tomcat:
        uri-encoding: UTF-8
    
    #logging:
       #config: classpath:logback-spring.xml
       #level.root: debug
    

    2. Properties 文件

    properties 配置文件简单好用,在各种配置环境里都可以看到它的身影,它简单易用,但是在配置复杂结构时不如YAML 优雅美观。同样拿上面的 YAML 的复合结构举例,演示同样的配置在 properties文件中的写法。

    local.url=jdbc:mysql://localhost:3306/xxxxdb?useUnicodex=true&characterEncoding=utf8
    local.username=xxxx
    local.password=xxxx
    local.driverClassName=com.mysql.jdbc.Driver
    #初始化连接大小 
    local.initialSize=10
    #连接池最大使用连接数量
    local.maxActive=80
    #连接池最小空闲
    local.minIdle=7
    #获取连接最大等待时间
    local.maxWait=60000
    local.checkoutTimeout=3000
    

    3. 随机数与占位符

    RandomValuePropertySource 类对于注入随机值很有用(例如,注入秘密或测试用例)。它可以生成整数,长整数,uuid 或字符串等,通过 Spring Boot 对我们的封装,我们可以轻松的使用。

    占位符允许在配置的值中引用之前定义过的变量。

    #chart的default默认主题
    pie-default-tooltip-trigger = item
    pie-default-tooltip-formatter = {a} <br/>{b} : {c} ({d}%)
    pie-default-legend-orient = vertical
    pie-default-legend-left = left
    pie-default-series-radius = 55%
    pie-default-series-center = 50%,60%
    pie-default-series-itemStyle = {"emphasis":{"shadowBlur":10,"shadowOffsetX":0,"shadowColor":"rgba(0, 0, 0, 0.5)"}}
    
    radar-default-legend-orient = vertical
    radar-default-legend-left = left
    radar-default-series-areaStyle = {"normal":{"color":"rgba(60, 141, 188, 0.2)"}}
    

    4. 配置的使用

    不管是使用 YAML 还是 Properties 都可以进行配置文件的编写,但是还不知道具体的使用方式,通过下面的几个注解,可以让我们了解到这些配置的具体使用方式。
    在使用配置之前,添加所需依赖。

     <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <!-- 导入配置文件处理器,在配置相关文件时候会有提示 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    

    4.1 注解Value的使用

    @Value 支持直接从配置文件中读取值,同时支持 SpEL 表达式,但是不支持复杂数据类型和数据验证,下面是具体的使用。

    package com.sckj.mmxtsb.common.constant;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    /**
     * 
     * 系统常量
     * 
     *@author lijun
     *@date 2020年3月11日
     */
    @Component
    public class SystemValue {
        
            public static String gysHmdUrl;
            
            public static String cgxtUrl;
            
            public static String reportUrl;
            
            public static String cgxtGyspjUrl;
            public static String cgxtGyspjMobileUrl;
            
            public static String gysIndexUrl;
            
            public static String ggUrl;
            
            /**
             * 直接从配置文件读取一个值
             */
            @Value("${custom.last-name}")
            private String lastName;
            
            /**
             * 支持SpEL表达式
             */
            @Value("#{11*4/2}")
            private Integer age;
            
            
            @Value("${custom.url.reportUrl}")
            public void setReportUrl(String reportUrl) {
                SystemValue.reportUrl = reportUrl;
            }
            
            @Value("${custom.url.cgxtGyspj}")
            public void setCgxtGyspjUrl(String cgxtGyspjUrl) {
                SystemValue.cgxtGyspjUrl = cgxtGyspjUrl;
            }
            @Value("${custom.url.cgxtGyspjMobileUrl}")
            public void setCgxtGyspjMobileUrl(String cgxtGyspjMobileUrl) {
                SystemValue.cgxtGyspjMobileUrl = cgxtGyspjMobileUrl;
            }
    
            @Value("${custom.url.cgxtUrl}")
            public void setCgxtUrl(String cgxtUrl) {
                SystemValue.cgxtUrl = cgxtUrl;
            }
    
            @Value("${custom.url.gysHmdUrl}")
            public void setGysHmdUrl(String gysHmdUrl) {
                SystemValue.gysHmdUrl = gysHmdUrl;
            }
            
            @Value("${custom.url.gysIndexUrl}")
            public void setGysIndexUrl(String gysIndexUrl) {
                SystemValue.gysIndexUrl = gysIndexUrl;
            }
            
            @Value("${custom.url.ggUrl}")
            public void setGgUrl(String ggUrl) {
                SystemValue.ggUrl = ggUrl;
            }
            
        
    }
    
    

    4.2 注解ConfigurationProperties的使用

    @ConfigurationProperties 注解是 Spring Boot 提供的一种使用属性的注入方法。不仅可以方便的把配置文件中的属性值与所注解类绑定,还支持松散绑定,JSR-303 数据校验等功能。以上面演示的 Properties 的配置为例演示 @ConfigurationProperties 注解的使用。

    package com.sckj.mmxtsb.common.constant;
    
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    import org.hibernate.validator.constraints.Email;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import org.springframework.validation.annotation.Validated;
    
    /**
     * <p>
     * @Author lijun
     * @Date 2018/12/6 22:54
     */
    
    @Component
    @ConfigurationProperties(prefix = "custom")
    @Validated
    public class SystemValue {
        private String lastName;
        private Integer age;
        private Date birth;
        private Map<String, String> maps;
        private List<String> lists;
        /**
         * 支持数据校验
         */
        @Email
        private String email;
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public Date getBirth() {
            return birth;
        }
        public void setBirth(Date birth) {
            this.birth = birth;
        }
        public Map<String, String> getMaps() {
            return maps;
        }
        public void setMaps(Map<String, String> maps) {
            this.maps = maps;
        }
        public List<String> getLists() {
            return lists;
        }
        public void setLists(List<String> lists) {
            this.lists = lists;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    }
    

    @Component 自动添加 bean 到 spring 容器中。
    @ConfigurationProperties 告诉这个类的属性都是配置文件里的属性,prefix 指定读取配置文件的前缀。

    相关文章

      网友评论

          本文标题:【springboot 】(2)

          本文链接:https://www.haomeiwen.com/subject/nbchjhtx.html