springboot自定义属性和编码格式的设置

原创 2018年04月17日 10:45:49

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

mysql.jdbcName=com.mysql.jdbc.Driver
mysql.jdbcUrl=jdbc:mysql://localhost:3306/test
mysql.userName=root
mysql.userPassword=root

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

package com.example.demo.Controller;
import com.example.demo.properties.MysqlBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class DemoController {
    /**
     * 数据库的属性的注入
     */
    @Value(value="${mysql.jdbcName}")
    private String jdbcName;
    @Value(value="${mysql.jdbcUrl}")
    private String jdbcUrl;
    @Value(value="${mysql.userName}")
    private String userName;
    @Value(value="${mysql.userPassword}")
    private String userPassword;
    @RequestMapping("/sjk")
    public String shk(){
     return "mysql.jdbcName:"+jdbcName+"<br/>"                                   +"mysql.jdbcUrl:"+jdbcUrl+"<br/>"                 +"mysql.userName:"+userName+"<br/>"                  +"mysql.userPassword:"+userPassword+"</br>";
        }
    }

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

package com.example.demo.properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
 * @Component转换为实体bean
 */
@Component
@ConfigurationProperties(prefix = "mysql")
public class MysqlBean {
    private String jdbcName;
    private String jdbcUrl;
    private String userName;
    private String userPassword;
    public String getJdbcName() {
        return jdbcName;
    }
    public void setJdbcName(String jdbcName) {
        this.jdbcName = jdbcName;
    }
    public String getJdbcUrl() {
        return jdbcUrl;
    }
    public void setJdbcUrl(String jdbcUrl) {
        this.jdbcUrl = jdbcUrl;
    }
    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;
    }
}
@Resource
   private MysqlBean mysqlBean;
        @RequestMapping("/sjk")
        public String shk(){
            return "mysql.jdbcName:"+mysqlBean.getJdbcName()+"<br/>"                  +"mysql.jdbcUrl:"+mysqlBean.getJdbcUrl()+"<br/>"                  +"mysql.userName:"+mysqlBean.getUserName()+"<br/>"                   +"mysql.userPassword:"+mysqlBean.getUserPassword()+"</br>";
        }

此时配置完还需要在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);
    }
}

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

中文乱码问题

当在.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前的勾选上。
注解
@RequestMapping 配置url 映射
@Controller 处理http请求
@RestController 处理ajax的请求
@PathVariable 获取url 参数
@RequestParam 获取请求的参数

@Controller
@RequestMapping("/param")
public class ParamController {
    @RequestMapping("/query")
    public ModelAndView query(@RequestParam(value = "q",required = false)String q ){
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("q",q);
        ***modelAndView.setViewName("param");***
        return  modelAndView;
    }
}

这里出现一个错误, modelAndView.setViewName(“param”);和@RequestMapping(“/param”)

Spring Boot 自定义属性 以及 乱码问题

自定义属性application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这里:#自定义属性 com.waiting.custom.one=自定义属性ONE com.w...
  • m0_37995707
  • m0_37995707
  • 2017-08-23 15:05:45
  • 3895

【SpringBoot】SpringBoot更改项目编码集

1、Spring Boot修改编码方法,在application.properties里面配置 spring.http.encoding.charset=UTF-8 spring.http.encod...
  • mrlin6688
  • mrlin6688
  • 2017-11-22 13:39:49
  • 555

Spring Boot - 自定义属性及多环境配置

很多人选择Spring Boot就是因为抛弃了以往繁琐的XML配置,我们只需要在pom.xml文件中引入不同的模块,比如spring-boot-starter-web、spring-boot-star...
  • suo082407128
  • suo082407128
  • 2017-09-08 13:56:42
  • 267

spring boot 配置默认编码。request 设置不生效。

1  有时候 直接在 reques 中 设置 charset并不会生效。需要在第一个过滤器中就设置,后面才能生效。 2 配置 spring.http.encoding.charset=utf8 就生...
  • changdejie
  • changdejie
  • 2017-01-22 18:25:10
  • 6050

2、spring-boot 工程配置——配置文件详解:自定义属性、随机数、多环境配置等

相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷。我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁...
  • wanbf123
  • wanbf123
  • 2017-06-01 13:41:48
  • 1002

spring boot自定义属性配置

Spring Boot 会自动转换类型,当使用List的时候需要注意在配置中对List进行初始化! 参照网址: http://blog.csdn.net/isea533/artic...
  • shunhua19881987
  • shunhua19881987
  • 2017-07-19 10:38:26
  • 435

Spring Boot使用自定义的properties属性

pring boot使用application.properties默认了很多配置。但需要自己添加一些配置的时候,我们应该怎么做呢。  若继续在application.properties中添加 ...
  • u012100371
  • u012100371
  • 2017-08-17 09:00:52
  • 287

(六)、SpringBoot 自定义配置属性,可以在application.properties中修改

可以前往第一篇博客查看目录结构 --&amp;gt; 这里一、自定义配置 (一些动态的数据:登录页面地址 、接收数据格式等等)二、在core模块下创建properties目录 : com.zeke.c...
  • zekeTao
  • zekeTao
  • 2018-03-14 10:51:44
  • 76

SpringBoot 自定义属性乱码问题(eclipse版)

坚持把遇到的问题整理出来,供大家参考(企鹅群:263130304),转载注明出处(方便大家找我要源码),对你有帮助请点个赞,如果存在不足之处请留意,不喜勿喷,欢迎大家相互交流学习。——沙果1、ecli...
  • lz_sha
  • lz_sha
  • 2018-03-27 10:52:58
  • 12

springboot之自定义属性

一:自定义属性 pom.xml增加依赖 org.springframework.boot spring-boot-starter-web ...
  • KSMaster
  • KSMaster
  • 2018-01-08 14:31:04
  • 72
收藏助手
不良信息举报
您举报文章:springboot自定义属性和编码格式的设置
举报原因:
原因补充:

(最多只允许输入30个字)