美文网首页
【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