自定义属性
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”)