Spring Boot 自定义属性 以及 乱码问题
自定义属性
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 自定义属性 以及 乱码问题的更多相关文章
- spring boot: 中文显示乱码,在applicationContext里面配置
		
spring boot: 中文显示乱码,在applicationContext里面配置 applicationContext.properties ########################## ...
 - 再谈Spring Boot中的乱码和编码问题
		
编码算不上一个大问题,即使你什么都不管,也有很大的可能你不会遇到任何问题,因为大部分框架都有默认的编码配置,有很多是UTF-8,那么遇到中文乱码的机会很低,所以很多人也忽视了. Spring系列产品大 ...
 - spring boot 自定义属性覆盖application文件属性
		
参考 Spring boot源码分析-ApplicationListener应用环境: https://blog.csdn.net/jamet/article/details/78042486 加载a ...
 - Spring Boot自定义属性配置文件开启提示
		
前言:有时候在Sping Boot项目中需要自定义属性.又想在配置文件(*.properties)中显示提示时. 测试环境:Sping Boot2x + Maven + Lombok 准备测试的配置类 ...
 - spring boot + velocity中文乱码解决方式
		
在application.properties文件中,加入如下配置: spring.velocity.properties.input.encoding=UTF-8spring.velocity.pr ...
 - spring boot application.properties乱码问题
		
1. 在application.properties 中增加 spring.http.encoding.force=true spring.http.encoding.charset=UTF- spr ...
 - spring boot 的中文乱码
		
首先 自检IDEA的编码 配置文件加入设置http tomcat spring.http.encoding.force=true spring.http.encoding.charset=UTF-8 ...
 - Spring Boot 从入门到实战汇总
		
之前写过几篇spring boot入门到实战的博文,因为某些原因没能继续. 框架更新迭代很快,之前还是基于1.x,现在2.x都出来很久了.还是希望能从基于该框架项目开发的整体有一个比较系统的梳理,于是 ...
 - Spring Boot整合Activiti,查看流程图出现中文乱码问题
		
最近研究SpringBoot 整合Activiti时,实现流程图高亮追踪是出现中文乱码问题,找了很多方法,现在把我最后的解决方法提供给大家. Spring Boot是微服务快速开发框架,强调的是零配置 ...
 
随机推荐
- 定期删除elasticsearch 的index 索引
			
#!/bin/bashfind /data/elasticsearch/data/pro-kz-log/nodes/0/indices/ -type d -mtime +7 | awk -F" ...
 - XML5个转义符
			
XML5个转义符:<,>,&,”,©;的转义字符分别如下: < >& " '
 - 《Java Concurrency》读书笔记,使用JDK并发包构建程序
			
1. java.util.concurrent概述 JDK5.0以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent包中,是专门用于多线并发编程的,充分利用了现代多处 ...
 - untiy 2d游戏平面直角坐标系的旋转应用
			
2d旋转的应用 1 :条件1 (已知) 创建一个平面直角坐标系 左上角为(0,0),能够把一个加入了UIPanel组件的物体(名字叫Father)移至UIRoot左上角 Y和Z轴都旋转180度.这样你 ...
 - 在sublime text3中安装git插件
			
使用Package Control组件(推荐),打开install package控制台后,直接输入git就可以安装git插件. 这个时候Sublime Text只是安装了git插件,但还不能使用gi ...
 - 提取字符串中的数字(C语言)
			
题目要求 问题描述:给定一个任意字符串,提取出其中所包含的整数. 样例输入:A12 32bc de51f6576g 样例输出:共计 4 个整数:12 32 51 6576 解决方案-指针版本 核心思想 ...
 - 【小白的CFD之旅】25 二维还是三维
			
小白最近逛图书馆,发现最近关于Fluent的书是越来越多了,而且还发现这些关于Fluent教材中的案例都大同小异.小白接受小牛师兄的建议,找了一本结构比较鲜明的书照着上面的案例就练了起来.不过当练习的 ...
 - django rest_framework入门二-序列化
			
在前一节中,我们已经粗略地介绍了rest_framework的作用之一序列化,下面我们将详细探究序列化的使用. 1.新建一个app snippets python manage.py startapp ...
 - psycopg事务
			
1.事务的特性 原子性,要么完成,要么都不完成 2.psycopg的事务特点 在psycopg中,事务是由connection处理的,当第一次一个命令发送给数据库时(开启数据库操作游标), 一个事务就 ...
 - (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境
			
Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)注意:工程必须添加两个宏:“配置属性”/“C或C++”/“预处理器”/“预处理器定义”,添加两个宏:_CRT_SECURE_ ...