Spring Boot属性配置&自定义属性配置
一、修改默认配置
例1、spring boot 开发web应用的时候,默认tomcat的启动端口为8080,如果需要修改默认的端口,则需要在application.properties 添加以下记录:
server.port=8888
重启项目,启动日志可以看到:Tomcat started on port(s): 8888 (http) 启动端口为8888,浏览器中访问 http://localhost:8888 能正常访问。
例2、spring boot 开发中的数据库连接信息配置(这里使用com.alibaba 的 druid), 在application.properties 添加以下记录:
druid.url=jdbc:mysql://localhost:3306/cimc druid.driver-class=com.mysql.jdbc.Driver druid.username=root druid.password=root druid.initial-size=1 druid.min-idle=1 druid.max-active=20 druid.test-on-borrow=true
说明了如需修改starter模块中的默认配置,只需要在在application.properties 添加需要修改的配置即
附: application.properties 全部配置项,点击查看Spring Boot 所有配置说明
二、自定义属性配置
在application.properties中除了可以修改默认配置,我们还可以在这配置自定义的属性,并在实体bean中加载出来。
1、在application.properties中添加自定义属性配置
user=loaderman
userPassword=123456
2、编写Bean类,加载属性
User类需要添加@Component注解,让spring在启动的时候扫描到该类,并添加到spring容器中。
package com.generalichina.cimc.bean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class User { //获取application.properties的属性 @Value("${user}") private String userName; @Value("${userPassword}") private String userPassword; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } }
3、在controller中注入并使用User这个Bean。
package com.generalichina.cimc.controller; import com.generalichina.cimc.bean.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class IndexController { @Autowired private User user; @RequestMapping("/index") public String index() { System.out.println(user.getUserName() + " " + user.getUserPassword()); return "index"; } }
浏览器访问:http://localhost:8888/index
控制台输出:loaderman 123456
三、application.properties 属性配置详解
1、参数引用与random随机数方法的使用
在application.properties内可以直接通过${}引用其他属性的值,如下:
user=loaderman
userPassword=123456${user}
输出: loaderman 123456loaderman
在application.properties中如果需要获取随机数,可以通过${random},如下:
#获取随机字符串 com.sam.randomValue=${random.value} #获取随机字符串:${random.value} #获取随机int:${random.int} #获取10以内的随机数:${random.int(10)} #获取10-20的随机数:${random.int[10,20]} #获取随机long:${random.long} #获取随机uuid:${random.uuid}
2、多环境配置
实际开发中可能会有不同的环境,有开发环境、测试环境、生成环境。对于每个环境相关配置都可能有所不同,如:数据库信息、端口配置、本地路径配置等。
如果每次切换不同环境都需要修改application.properties,那么操作是十分繁琐的。在spring boot中提供了多环境配置,使得我们切换环境变得简便。
在application.properties同目录下新建一下三个文件:
application-dev.properties //开发环境的配置文件 application-test.properties //测试环境的配置文件 application-prod.properties //生产环境的配置文件
上面三个文件分别对应了 开发、测试、生产 的配置内容,接下来就是应该怎么选择性引用这些配置了。
在application.properties添加:
spring.profiles.active=dev #引用测试的配置文件 #spring.profiles.active=test #引用生产的配置文件 #spring.profiles.active=prod
添加spring.profiles.active=dev后启动应用,会发现引用了dev的这份配置信息。
可以看出上面三个配置文件符合 application-{profile}.properties 格式,而在application.properties添加的 spring.profiles.active=dev 中的dev正是上面配置文件中的 profile。根据具体环境进行切换即刻。
补充:
在spring boot 中配置除了支持 application.properties,还支持application.yml的配置方式,如下:
新建application.yml代替application.properties
server: port: 8080 spring: datasource: #name: druid #type: com.alibaba.druid.pool.DruidDataSource #druid相关配置 druid: #监控统计拦截的filters filters: stat driver-class-name: oracle.jdbc.OracleDriver #基本属性 url: jdbc:oracle:thin:@192.168.192.192:1521:ORCL username: root password: root #配置初始化大小/最小/最大 initial-size: 5 min-idle: 5 max-active: 20 #获取连接等待超时时间 max-wait: 60000 #间隔多久进行一次检测,检测需要关闭的空闲连接 time-between-eviction-runs-millis: 60000 #一个连接在池中最小生存的时间 min-evictable-idle-time-millis: 300000 validation-query: select * from xxx test-while-idle: true test-on-borrow: false test-on-return: false #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 mvc: view: prefix: /WEB-INF/jsp/ suffix: .jsp resources: add-mappings: false jackson: serialization: write-dates-as-timestamps: true ## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别 mybatis: mapper-locations: classpath:mapper/*.xml #注意:一定要对应mapper映射xml文件的所在路径 type-aliases-package: com.sharewin.fcapp.pojo # 注意:对应实体类的路径 configuration: use-column-label: true use-generated-keys: true map-underscore-to-camel-case: true logging: config: classpath:logback-spring.xml path: /var/log debug: true
注意:port: 8080中间是有空格的,yml语法请参考:yml配置文件用法
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!