自定义属性

@value注入

在application.properties新增配置

  1. student.name=小明
    student.age=12
    student.info=${student.name}${student.age}
  1. package com.liqiang.contorller;
  2.  
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6.  
  7. @RestController
  8. public class HelloWordContorller {
  9. @Value("${student.name}")
  10. private String name;
  11. @Value("${student.age}")
  12. private int age;
  13.  
  14. @Value("${student.info}")
  15. private String info;
  16. @RequestMapping("/helloword")
  17. public String helloWord(){
  18. return "姓名:"+name+",年龄:"+age+" 全部信息:"+info;
  19. }
  20. }

如果输出乱码

在properties加上

  1. #返回页面、数据中文乱码问题
  2. spring.http.encoding.force=true
  3. spring.http.encoding.charset=UTF-8
  4. spring.http.encoding.enabled=true
  5. server.tomcat.uri-encoding = UTF-8
  6. #解决程序读配置文件乱码问题
  7. spring.message.encodiang = UTF-8
  8. student.name=小明
  9. student.age=12
  10. student.info=${student.name}${student.age}

如果加上之后还是乱码 修改idea文件编码格式

java bean形式注入

需要引入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-configuration-processor</artifactId>
  4. <optional>true</optional>
  5. </dependency>

如果自定义属性很多 10几个字段 需要一个一个注入太麻烦了,可以使用java bean的形式

  1. @Component
  2. @ConfigurationProperties(prefix = "student")//会找配置文件student前缀 后缀为属性名
  3. public class StudentConfig {
  4.  
  5. private String name;
  6. private int age;
  7.  
  8. public String getName() {
  9. return name;
  10. }
  11.  
  12. public void setName(String name) {
  13. this.name = name;
  14. }
  15.  
  16. public int getAge() {
  17. return age;
  18. }
  19.  
  20. public void setAge(int age) {
  21. this.age = age;
  22. }
  23. }
  1. @RestController
  2. public class HelloWordContorller {
  3. @Autowired
  4. private StudentConfig studentConfig;
  5.  
  6. @RequestMapping("/helloword")
  7. public String helloWord(){
  8. return "姓名:"+studentConfig.getName()+",年龄:"+studentConfig.getAge();
  9. }
  10. }

所有配置都配置在appliction.properties 显得太乱了。

我们可以新建studentConfig.properties

然后指定加载的文件

  1. @Component
  2. @ConfigurationProperties(prefix = "student")
  3. @PropertySource("classpath:studentconfig.properties")
  4. public class StudentConfig

内置Random配置

  1. ${random.value}
  2. ${random.int}
  3. ${random.long}
  4. ${random.uuid}
  5. ${random.int(10)}
  6. ${random.int[1024,65536]}

多环境配置

properties形式

比如正式环境   测试环境  开发环境  不同环境的 数据库不一样 redis  mq等不一样  当我们开发时使用开发环境 测试使用测试环境

  1. application-dev.properties 开发(配置了 开发数据库 mq redis等信息)
  2. application-online.properties 线上(配置了 线上数据库 mq redis等信息)
  3. application-test-propertie 测试环境(配置了测试数据库 mq redis等信息)

在appliction.properties使用spring.profiles.active切换对应的环境

如需要使用开发环境

spring.profiles.active=dev

发布到线上

spring.profiles.active=online

也可用通过

spring.profiles.include=datasource,prodmq  来进行不同配置的叠加

javaconfig形式

比如模拟正式与开发的数据源切换

1.创建一个数据源接口

  1. public interface DataSource {
  2. public String getConnection();
  3. }

2.oracle数据源实现类

  1. public class OracleDataSource implements DataSource {
  2. @Override
  3. public String getConnection() {
  4. return "oracle数据源";
  5. }
  6. }

3.创建mysql数据源

  1. public class MysqlDataSource implements DataSource {
  2.  
  3. @Override
  4. public String getConnection() {
  5. return "mysql数据源";
  6. }
  7. }

4.创建DataSourceConfig

  1. @Configuration
  2. public class DataSourceConfig {
  3. @Bean
  4. @Profile("online")
  5. public DataSource createMysqlDataSource(){
  6. return new MysqlDataSource();
  7. }
  8. @Bean
  9. @Profile("dev")
  10. public DataSource createOracleDataSource(){
  11. return new OracleDataSource();
  12. }
  13. }

5.contorller

  1. @RestController
  2. public class HelloWordContorller {
  3. @Autowired
  4. private DataSource dataSource;
  5.  
  6. @RequestMapping("/helloword")
  7. public String helloWord(){
  8. return dataSource.getConnection();
  9. }
  10. }

当我们配置

  1. spring.profiles.active=dev

页面输出

改成

  1. spring.profiles.active=online
    页面输出

我们这里只是模拟并不是真正的创建数据源。

注意:不要认为这个功能是springboot提供的。而是spring提供的

spring提供几种装配模式

一种是xml形式   就是我们以前传统用的 配置数据源

  1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  2. destroy-method="close">
  3. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  4. <property name="url" value="${url}" />
  5. <property name="username" value="${username}" />
  6. <property name="password" value="${password}" />
  7. <property name="initialSize" value="5" />
  8. </bean>

通过配置spring扫描到xml会根据配置内容初始化com.alibaba.druid.pool.DruidDataSource类的对象 装载到容器里面

还有就是javaconfig模式(也是springboot推荐的)

  1. @Configuration
  2. public class DataSourceConfig {
  3. @Beanpublic DataSource createMysqlDataSource(){
  4. DruidDataSource druidDataSource=new DruidDataSource();
  5. druidDataSource.setUrl("");
  6. druidDataSource.setUsername("");
  7. druidDataSource.setPassword("");
  8. return druidDataSource;
  9. }
  10. }

spring 会扫描包下面打了Configuration的类 调用打上了@Bean的方法 将返回值注入容器

  1. @Profile("dev")注解也是spring提供。根据不同的环境初始化对应的@Bean的方法 实现不同环境配置的切换
  1.  

Spring Boot-properties使用(二)的更多相关文章

  1. 玩转spring boot——properties配置

    前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连 ...

  2. spring boot高性能实现二维码扫码登录(上)——单服务器版

    前言 目前网页的主流登录方式是通过手机扫码二维码登录.我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查 ...

  3. spring boot高性能实现二维码扫码登录(中)——Redis版

    前言 本打算用CountDownLatch来实现,但有个问题我没有考虑,就是当用户APP没有扫二维码的时候,线程会阻塞5分钟,这反而造成性能的下降.好吧,现在回归传统方式:前端ajax每隔1秒或2秒发 ...

  4. spring boot高性能实现二维码扫码登录(下)——订阅与发布机制版

     前言 基于之前两篇(<spring boot高性能实现二维码扫码登录(上)——单服务器版>和<spring boot高性能实现二维码扫码登录(中)——Redis版>)的基础, ...

  5. Spring Boot 启动(二) 配置详解

    Spring Boot 启动(二) 配置详解 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置 ...

  6. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  7. Spring Boot 启动(二) Environment 加载

    Spring Boot 启动(二) Environment 加载 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 上一节中 ...

  8. Spring Boot REST(二)源码分析

    Spring Boot REST(二)源码分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) SpringBoot RE ...

  9. Spring Boot 2.X(二):集成 MyBatis 数据层开发

    MyBatis 简介 概述 MyBatis 是一款优秀的持久层框架,支持定制化 SQL.存储过程以及高级映射.它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序中对关系数据库的操作更方便简 ...

  10. spring boot / cloud (十二) 异常统一处理进阶

    spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...

随机推荐

  1. Extjs4,form提交时emptyText传值问题

    在Extjs4中,form提交时,文本框的emptyText会传到后台,比如 上图中的“请选择”这样的文本会作为值传到后台. 解决方法: form提交时配置  submitEmptyText: fal ...

  2. Navicat Lite 提示Connection to mysql server on 10065

    Navicat Lite 提示Connection to mysql server on 10065 验证过主要是防火墙问题 [root@014136251035 zhop]# vi /etc/sys ...

  3. 自己定义NumberPicker

    1.   项目中要用DatePicker 做时间选择用.但发现有android自带的好搓,就找了下有没有自己定义的时间选择控件. 找来找去发现github上的都时间控件都比較大.比較占手机屏幕的空间, ...

  4. B2460 [BeiJing2011]元素 线性基

    这个题是对刚才线性基的一个补充,就是中间有一些小贪心,贪心就很有意思,先按权值排序,然后就瞎搞就行了. 题干: Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们 ...

  5. android 从assets和res中读取文件(转)

    1. 相关文件夹介绍      在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件 ...

  6. Java项目打包发布

    Java项目打包发布 如果只想发布为一个可执行的jar包,使用eclipse的Export功能就可以了 使用eclipse的Export功能,将项目中的所有package打包为一个pet.jar文件, ...

  7. PCB Genesis原点坐标转换关系

    一.Genesis原点坐标转换关系: 1.读取Genesis坐标转换:   UI界面坐标 = 文件坐标 - 偏移值 2.写入Genesis坐标转换:   文件坐标 = UI界面坐标 + 偏移值 3.为 ...

  8. Power Network(最大流(EK算法))

    http://poj.org/problem?id=1459 题意:有一个电路网络,每个节点可以产生.传递.消耗若干电量,有点线连接结点,每个电线有最大传输量,求这个网络的最大消费量. 思路:从源点到 ...

  9. SQLServer2008 使用sql语句访问excel数据

    exec sp_configure 'show advanced options',1  reconfigure  exec sp_configure 'Ad Hoc Distributed Quer ...

  10. 使用TortoiseSVN碰到的几个问题(1)-导入,提交,更新

    1)导入数据到版本库 第一种情况,使用Import导入命令的时候 不能选择包含哪些指定文件或目录, 导入的文件夹不能变成工作副本,(如果你在“工作副本”目录下执行导入命令是不起作用的.)必须通过签出操 ...