自定义属性

application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这里:

#自定义属性
com.waiting.custom.one=自定义属性ONE
com.waiting.custom.two=自定义属性TWO
com.waiting.custom.three=3
  • 1
  • 2
  • 3
  • 4

然后直接在要使用的地方通过注解@Value(value="${config.name}")取出:

@RestController
public class HelloController { public final static Logger logger = LoggerFactory.getLogger(HelloController.class); @Value("${com.waiting.custom.one}")
private String stringOne;
@Value("${com.waiting.custom.two}")
private String stringTwo;
@Value("${com.waiting.custom.three}")
private Integer integerThree; @RequestMapping(value = "/",name = "Hello")
public String testHello(){
logger.info("logback-ok");
return "Hello Spring-boot!"+stringOne+stringTwo+integerThree;
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

使用随机数及自定义配置类

有时候我们需要我们的参数不是一个固定值,而是一个随机数(比如密钥)。Spring Boot的属性配置文件中可以通过${random}来产生int值、long值或者String字符串,来支持属性的随机值。

#随机字符串
com.waiting.random.str=${random.value}
#随机int
com.waiting.random.number=${random.int}
#随机long
com.waiting.random.bigNumber=${random.long}
#10以内的随机数
com.waiting.random.test1=${random.int(10)}
#10-20的随机数
com.waiting.random.test2=${random.int[10,20]}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这边配置中我们发现有一个特点,所有配置都是以"com.waiting.random"开头的,而且有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,这里我们建一个RandomProperties .java类,顶部需要使用注解@ConfigurationProperties(prefix = "com.waiting.random")来进行声明:

//@Configuration
//@Component
@ConfigurationProperties(prefix = "com.waiting.random")
public class RandomProperties { private String str;
private Integer number;
private Long bigNumber;
private Integer test1;
private Integer test2; // getter/setter方法省略 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

此时配置完还需要在spring Boot入口类加上@EnableConfigurationProperties并指明要加载哪个bean,如果不写RandomProperties.class,在bean类那边添加@Configuration或者@Component

@SpringBootApplication
@EnableConfigurationProperties({RandomProperties.class})
public class SpringbootdemoApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootdemoApplication.class, args);
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

把所有的自定义配置都放在application.properties里面会显得臃肿,这时候我们可以另外定义一个配置文件,这里我明取名为random.properties,路径放在src/main/resources/waiting下面。
这里只需要在之前的bean上添加@PropertySource("classpath:waiting/random.properties")@Configuration这个注解就可以了。
注意:不能再采取之前的@EnableConfigurationProperties({RandomProperties.class})这个方法。
最后controller层或service获取的时候用@Autowired注解就可以获取。

    @Autowired
private RandomProperties randomProperties; @Value("${com.waiting.custom.one}")
private String stringOne;
@Value("${com.waiting.custom.two}")
private String stringTwo;
@Value("${com.waiting.custom.three}")
private Integer integerThree; @RequestMapping(value = "/",name = "Hello")
public String testHello(){
logger.info("logback-ok"); return "Hello Spring-boot!"+stringOne+stringTwo+integerThree+"\r"+randomProperties;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

中文乱码问题

当在.properties的配置文件中有中文时,读取出来的是乱码。需要进行如下操作:

1、添加配置

#设置spring-boot 编码格式
banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2、设置文件类型

application.properites的文件类型修改为UTF-8的编码类型。
通过以上方法测试获取出来的值还是乱码。

解决办法

2.1、IDEA

设置 File Encodings的Transparent native-to-ascii conversion为true,具体步骤如下:
依次点击
File -> Settings -> Editor -> File Encodings
将Properties Files (*.properties)下的Default encoding for properties files设置为UTF-8,将Transparent native-to-ascii conversion前的勾选上。

2.2、eclipse

在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文
推荐使用里面的离线安装。安装完成PropertiesEditor 插件后,使用该编辑器重新编辑属性文件中的中文,然后重新运行程序,发现读取的中文配置文件不是乱码了。

Spring Boot 自定义属性 以及 乱码问题的更多相关文章

  1. spring boot: 中文显示乱码,在applicationContext里面配置

    spring boot: 中文显示乱码,在applicationContext里面配置 applicationContext.properties ########################## ...

  2. 再谈Spring Boot中的乱码和编码问题

    编码算不上一个大问题,即使你什么都不管,也有很大的可能你不会遇到任何问题,因为大部分框架都有默认的编码配置,有很多是UTF-8,那么遇到中文乱码的机会很低,所以很多人也忽视了. Spring系列产品大 ...

  3. spring boot 自定义属性覆盖application文件属性

    参考 Spring boot源码分析-ApplicationListener应用环境: https://blog.csdn.net/jamet/article/details/78042486 加载a ...

  4. Spring Boot自定义属性配置文件开启提示

    前言:有时候在Sping Boot项目中需要自定义属性.又想在配置文件(*.properties)中显示提示时. 测试环境:Sping Boot2x + Maven + Lombok 准备测试的配置类 ...

  5. spring boot + velocity中文乱码解决方式

    在application.properties文件中,加入如下配置: spring.velocity.properties.input.encoding=UTF-8spring.velocity.pr ...

  6. spring boot application.properties乱码问题

    1. 在application.properties 中增加 spring.http.encoding.force=true spring.http.encoding.charset=UTF- spr ...

  7. spring boot 的中文乱码

    首先 自检IDEA的编码 配置文件加入设置http tomcat spring.http.encoding.force=true spring.http.encoding.charset=UTF-8 ...

  8. Spring Boot 从入门到实战汇总

    之前写过几篇spring boot入门到实战的博文,因为某些原因没能继续. 框架更新迭代很快,之前还是基于1.x,现在2.x都出来很久了.还是希望能从基于该框架项目开发的整体有一个比较系统的梳理,于是 ...

  9. Spring Boot整合Activiti,查看流程图出现中文乱码问题

    最近研究SpringBoot 整合Activiti时,实现流程图高亮追踪是出现中文乱码问题,找了很多方法,现在把我最后的解决方法提供给大家. Spring Boot是微服务快速开发框架,强调的是零配置 ...

随机推荐

  1. 颠覆Git 命令使用体验的神器 - tig

    颠覆 Git 命令使用体验的神器 -- tig     tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, g ...

  2. 微信小程序,开发中几个重要的知识点(加密解密,转发,进入场景,session_key)

    小程序的授权信息:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html 小程序的 ...

  3. Android studio界面相关设置

    用惯了emacs的操作方式,每当使用一款新的编辑器的时候,第一个想到的就是这个工具有没有emacs的快捷键,Android studio也是一样的. 1. Android studio设置emacs的 ...

  4. 如何在WPF中调用Winform控件

    原文地址:http://hi.baidu.com/stuoopluwqbbeod/item/32ec38403da42ee2bcf45167 功能实现主要分三步:1.添加两个引用:WindowsFor ...

  5. Vue(七):computed计算属性

    简介 计算属性关键词: computed. 计算属性在处理一些复杂逻辑时是很有用的. 实例1 可以看下以下反转字符串的例子: <div id="app"> {{ mes ...

  6. 如何使Android应用支持多种屏幕分辨率

    原文:http://android.eoe.cn/topic/android_sdk 描述: 让您指定您的应用支持的屏幕的大小并且可以通过屏幕兼容模式来支持比您应用所支持更大的屏幕.所以这对于您需要在 ...

  7. RSA算法 JS加密 JAVA解密

    有这样一个需求,前端登录的usernamepassword,password必需加密.但不可使用MD5,由于后台要检測password的复杂度,那么在保证安全的前提下将password传到后台呢,答案 ...

  8. Atitit 面试问题总结

    Atitit 面试问题总结 1. 面试约人阶段可以预先1俩分钟大概问下情况1 2. 自我介绍阶段1 3. 技术方面2 3.1. 界面方面2 3.2. Java 本身   了解spring mybati ...

  9. IOS高访微信聊天对话界面(sizeWithFont:constrainedToSize和stretchableImageWithLeftCapWidth的使用)

    大家好,百忙之中,抽出点空,写个微博,话说好久没写. 最近项目中有碰到写类似微信聊天界面上的效果,特整理了一下,写了一个小的Demo,希望给没头绪的同学们一个参考! 下载地址:http://files ...

  10. FATAL ERROR: Could not find ./share/fill_help_tables.sql

    [root@c01 mysql-5.6.33]# /apps/mysql-5.6.33/scripts/mysql_install_db --datadir=/data/my_db --user=my ...